WEB集群-tomcat集群

目录

目录导图

1 内容

java容器:中间件

jvm,jre,jdk

部署java环境,tomcat.

目录结构

systemctl配置文件配置使用.

常用部署java代码方式:war,jar

ngx+tomcat

远程监控功能

tomcat故障案例15k

tomcat优化

前后端分离项目

2 Java容器

java容器:用于存放与运行java代码的环境.

web中间件

3 JVM-JRE-JDK区别

java的1份代码可以在各种系统中运行与使用. 代码的可移植性高.

JVM: java 虚拟机,运行java代码的地方.

JRE: java Runtime Enviroment  —java运行环境

JDK: Java Development Kit  . 提供jvm环境,java命令.–java开发环境,包含 jvm+jre+额外功能 (命令与工具)

温馨提示:

未来部署Jdk即可

jdk👉oracle rpm包或二进制安装

openjdk 👉开源 yum安装

国产jdk….

4Tomcat部署与使用

1) 环境准备

2)部署jdk(rpm包安装):

alien 可以 rpm包转deb包

rpm -ivh   jdk-8u351-linux-x64.rpm

3)部署tomcat(二进制安装):

tomcat 8.5 9.0

tar xf apache-tomcat-9.0.65.tar.gz  -C /app/tools/

ln -s /app/tools/apache-tomcat-9.0.65/

/app/tools/tomcat

/app/tools/tomcat/bin/version.sh

#安装tomcat后检查环境:检查jdk,tomcat信息

4) 启动tomcat

/app/tools/tomcat/bin/startup.sh

进程是java,端口也是java,tomcat的是*:8080(代表web),java:8005

二进制包apache-tomcat-8.5.66.tar.gz解压即用,只需要先安装jdk

5 Tomcat目录结构

1) 目录概述

2) bin目录(存放脚本/批处理文件)

在startup.sh中:EXECUTABLE=catalina.sh

"$EXECUTABLE" start

含义为在catalina.sh脚本中进入$1=’start’的判断,执行启动

stop同理

3) conf(配置文件以xml结尾)

server.xml   tomcat配置文件,类似:nginx.conf

web.xml     配置文件,辅助配置

4) logs日志

catalina.out         tomcat核心应用日志

按照每天切割之后总的文件catalina.out里面也有内容
可以配置每几天切割一次等等,这个日志切割功能yum安装的nginx默认有

work此时此刻已经加载到jvm中的内容

5) webapps

站点目录.war包,自动解压,自动部署

localhost_access_log     访问日志

6) work

work目录存放此时此刻已经加载到jvm中的内容(正在运行的java虚拟机)

6 Tomcat日常管理与访问

1) 日常启动与维护

catalina.out

查看:startup in 启动用时.:org.apache.catalina.startup.Catalina.start Server startup in 502 ms

查看: Deploy tomcat加载到jvm哪些信息.

2) 书写systemctl管理配置文件进行管理

给二进制安装(tomcat)或编译安装(tengine)的软件书写systemctl配置文件.

可以通过systemctl 管理服务.(开关重启,开机是否自动.)

systemctl配置文件的路径: /usr/lib/systemd/system/xxxx.service 以.service结尾

分为3个部分. [Unit] [Service] [Install]

systemctl文件结构

ExecStop服务关闭命令

或者指定pid然后通过kill方式

#PIDFile=/run/nginx.pid

KillSignal=SIGQUIT

KillMode=process

#环境变量配置 (二进制形式安装的jdk才用)

#cat /etc/sysconfig/tomcat
#JAVA_HOME=/app/tools/jdk
#PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/bin/:/u
sr/sbin/:/usr/local/bin/:/usr/local/sbin/
#CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre
/lib:$JAVA_HOME/lib/tools.jar

#tomcat—systemctl配置

cat /usr/lib/systemd/system/tomcat.service

[Unit]
Description=Tomcat java web container
After=network.target
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

第一次给tomcat书写systemctl文件不需要重载,修改systemctl文件必须重载systemctl daemon-reload

systemctl enable --now tomcat   #启动并设置开机自启动

3) 运行JAVA代码⭐⭐

开发人员书写的java代码: java源代码,无法直接部署tomcat中.

需要对源代码进行编译: 生成war包或jar包,再把war或jar包进行部署.

war包可以放在tomcat的webapp目录下,自动加载运行

案例01:war包案例,运行memtest.war包案例,放在webapps目录,然后访问即可.

案例02:jar包案例,运行指定的jar包(webuinginx)

启动程序:可以在web页面管理nginx配置,先将jar包存放在/app/code/中

nginxWebUI-3.4.0.jar

#前台运行

java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/ngxweb/

#命令行运行后台运行 Linux:

注意Linux命令最后加一个&号, 表示项目后台运行

nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/ngxweb/ >/dev/null &

nohup自动把输出放到nohup.out中,tail -f可以查看实时输出,jobs显示后台进程,kill 1%关闭第一条后台进程

参数说明(都是非必填)

–server.port 占用端口, 默认以8080端口启动

–project.home 项目配置文件目录,存放数据库文件,证书文件,

日志等, 默认为/home/nginxWebUI/

webui如果想配置其他机器需要在被控机器也部署一个webui(不如修改nginx配置文件)

7 Tomcat管理端(熟悉)

tomcat首页(127.0.0.1:8080)的三个按钮含义及作用:管理tomcat

tomcat管理端,web页面管理与查看tomcat信息的功能.

对tomcat进行调优的时候临时开启。

未来生产环境中需要关闭。

开启管理端功能:两步

修改配置文件conf/tomcat-users.xml     (添加管理用户,设置账号密码)

修改代码(安全措施,如果不修改只能127访问)

修改配置文件tomcat-users.cml(修改rolename和下面的username)

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="lidao996" password="1" roles="manager-gui,admin-gui"/>
</ tomcat-users>

现在只能127访问:curl -u 指定页面认证时的用户名(也可以输入密码,用户名:密码的形式)

修改代码(webapps下的host-manager和manager目录里面的context.xml和manager.xml)

cd /app/tools/tomcat/webapps/

sed  -i ‘s#127#\\d+#g’ ./host-manager/META-INF/context.xml ./host-manager/WEB-INF/manager.xml ./manager/META-INF/context.xml

将里面的127替换成  \d  (表示0-9,任意ip都可以访问)

不需要重启tomcat,直接刷新即可访问管理页面

案例01: Tomcat部署zrlog应用

LNMT环境部署应用,war包应用.

创建数据库与用户.

war包部署到Tomcat webapps目录.

部署zrlog流程:

1.准备好数据库,库,用户.

2.tomcat环境,部署war包

3.安装代码与调试(页面点点点)

4.接入ngx(80端口域名访问:作为代理将请求转发到tomcat的8080端口)

数据库:(db01执行)

create database zrlog;
grant all on zrlog.* to 'zrlog'@'172.16.1.%' identified by '2';
show databases ;
select user,host from mysql.user;
mysql -uzrlog -p2 -h 172.16.1.51     #在数据库机器测试用户是否可以使用

部署代码:(怎么能让用户访问时uri不加/zrlog/就可以访问站点目录)

tomcat访问中:      webapps/下面内容 访问的时候 加上路径访问

webapps/zrlog/      👉         java.linuxjk.cn/zrlog/index.jsp

webapps/ROOT/代码     👉           java.linuxjk.cn/index.jsp

实现方法:

  1. 关闭tomcat(防止移走ROOT目录后默认生成ROOT目录)
  2. 将webapps/目录下的ROOT/ 转移走(删除也可以)
  3. zrlogxxx.war 改名为 ROOT.war
  4. 运行tomcat,等待自动加载ROOT目录

部署完代码之后进入博客安装页面:

浏览器访问 zrlog.linuxjk.cn:8080

zrlog数据库连接配置文件:

[root@web03 /app/tools/tomcat/webapps/ROOT]#   cat ./WEB-INF/db.properties

 

接入nginx:域名不加8848端口,使用80端口访问zrlog

cat zrlog.linuxjk.cn.conf

server {
listen 80;
server_name zrlog.linuxjk.cn;
error_log /var/log/nginx/zrlog.linuxjk.cn_error.log notice;
access_log /var/log/nginx/zrlog.linuxjk.cn_access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}

 tomcat+ngx动静分离(和之前的lnmp类似)

tomcat处理动态请求,nginx处理静态资源

未来如果想要配置动静分离未来需要开发拆分代码,把静态资源拆分出来单独存放交给nginx处理,设置为nginx用户;

这里我们使用加权限的方法,文件644;目录755,这样nginx用户对文件有读权限,目录读写权限

权限配置:

修改代码目录权限nginx可以访问.

chown -R root.root /app/tools/tomcat/

find /app/tools/tomcat/webapps/  -type f |xargs chmod 644

find /app/tools/tomcat/webapps/  -type d |xargs chmod 755

修改ngx配置静态资源ngx处理,站点目录是:

/app/tools/tomcat/webapps/ROOT/

ngx配置文件:
location ~* \.(html|js|css|png|jpeg|bmp|webp)$ {
root /app/tools/tomcat/webapps/ROOT;
expires 7d;
}
不设置权限的后果:

配置文件server.xml

8005 shutdown端口,连接这个端口输入shutdown字符,就可以关闭Tomcat.

<?xml version="1.0" encoding="UTF-8"?>
<!-- 8005 shutdown端口,连接这个端口输入shutdown字符,就可以关闭Tomcat.-->
<Server port="8005" shutdown="SHUTDOWN">
<!-- #配置 管理端认证功能(欢迎页面的账号密码) 
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="hs888p" password="1" roles="manager-gui,admin-gui"/>
-->
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<!-- #8080 处理用户的http请求的. 8443是用于处理 https请求. -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- #engine部分,指定默认的虚拟主机-->
<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot;&quot;%{User-Agent}i&quot; &quot;%{X-Forwarded-For}i&quot;"
/>
</Host>
<!-- Host部分,虚拟主机的配置部分.这里类似nginx的conf.d,可以配置多站点, -->
<Host name="zrlog.linuxjk.cn" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog.linuxjk.cn_access" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot;&quot;%{User-Agent}i&quot; &quot;%{X-Forwarded-For}i&quot;"
/>
</Host>
</Engine>
</Service>
</Server>

规范tomcat访问日志格式(server.xml)

pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot;&quot;%{User-Agent}i&quot; &quot;%{X-Forwarded-For}i&quot;"

这里和nginx的日志定义类似,&quot; 就代表” 每个变量直接可以加空格

tomcat虚拟主机配置,与nginx对比

tomcat配置多站点方式

虚拟主机(Virtual Host),类似nginx

适用于常规用户,更常用、更符合生产环境需求的方式

一个Tomcat实例中,通过配置一个Engine下的多个Host元素来实现。多个站点共享同一个Tomcat进程和端口,Tomcat会根据HTTP请求头中的Host字段(即域名)来决定将请求转发给哪个站点。

优点:

  • 资源占用少:所有站点运行在同一个JVM进程中。
  • 管理方便:只需维护一套Tomcat配置。
  • 使用标准端口:所有站点都可以使用80或443端口,通过域名区分。

缺点:

  • 隔离性差:所有应用共享同一个Tomcat容器,某个应用的内存泄漏或异常可能会影响到其他所有应用。
  • 单点故障:Tomcat进程崩溃,所有站点都不可用。

虚拟主机方式用户请求流程:

  1.  请求与8080端口连接
  2. 域名与Host部分的Name进行匹配,匹配成功则使用对应的虚拟主机.匹配失败则使用Engine部分defaultHost指定的默认的虚拟主机进行处理.
  3. 如果之前部署的时候将webappps里的ROOT目录删除,将项目名字改成ROOT,同时配置文件里写的站点目录还是webapps,那么localhost就会访问这个ROOT里面的内容;所以还是建议部署应用时,不装到webapps里,指定其他目录,将指定的目录中的ROOT替换成站点目录

安装多个tomcat配合不同端口(多实例)

这种适用于服务器配置豪华,一个tomcat吃不满性能,配置多实例,是最经典、隔离性最好的方法

每个Tomcat都有自己的confwebappslogs等目录,彼此完全隔离。安装后修改监听端口

优点:

  • 隔离性强:一个站点的崩溃、配置错误或高负载不会影响其他站点。
  • 安全性好:可以为每个实例配置不同的运行用户和权限。
  • 管理清晰:更新、重启、调试单个站点不会干扰他人。

缺点:

  • 资源占用多:每个实例都是一个独立的JVM进程,会消耗更多的内存和CPU。
  • 管理稍复杂:需要维护多个Tomcat的配置和启动脚本。

目标: 在同一台Linux主机上运行多个tomcat实例.
原因: 充分利用服务器资源.

多实例使用的步骤:
  • 多个tomcat目录 (每个tomcat安装到不同的目录)
  • 配置文件:端口 8080,8005 ,8443
  • 启动 也要书写systemctl.
#准备多个tomcat目录

tar xf apache-tomcat-9.0.65.tar.gz
cp -r apache-tomcat-9.0.65 tomcat-8081
cp -r apache-tomcat-9.0.65 tomcat-8082
mv tomcat-808* /app/tools/

#修改配置
sed -i 's#8005#8006#g' tomcat-8081/conf/server.xml
sed -i 's#8080#8081#g' tomcat-8081/conf/server.xml
sed -i 's#8005#8007#g' tomcat-8082/conf/server.xml
sed -i 's#8080#8082#g' tomcat-8082/conf/server.xml

#手动启动
/app/tools/tomcat_8081/bin/startup.sh
/app/tools/tomcat_8082/bin/startup.sh

#书写测试页面
echo java oldboylinux 8081 >/app/tools/tomcat-
8081/webapps/ROOT/lidao.jsp
echo java oldboylinux 8082 >/app/tools/tomcat-
8082/webapps/ROOT/lidao.jsp

#⚠ 未来生产上,可以直接把tomcat+应用整体打包,使用的时候直接解压即可.

java远程监控功能

1) 概述

类似于nginx的stub_status和负载均衡check模块

未来通过各种监控工具(Zabbix/Grafana/Prometheus/….),监控Tomcat/java.

需要我们开启java远程监控功能(JMX remote)

2) 步骤

tomcat(catalia.sh)中修改tomcat启动的选项.开启jmx远程监控功能.

交给zbx就可以了(使用windows jdk连接tomcat,通过jconsole工具连接.)

直接写在catalina.sh 文件中的125 行(注释)后面

CATALINA_OPTS java环境变量,指定java启动的时候的选项 增加tomcat启动后java 命令后面的选项.

CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=10.0.0.9"
远程监控功能选项的含义

修改之后重启tomcat,ps查看java进程中增加了上面添加的那些选项

在windows下,通过jdk连接tomcat(模拟监控软件连接)

C:\Program Files\Java\jdk1.8.0_201\bin\jconsole.exe

输入被监控的ip和端口10.0.0.9:12345  即可查看tomcat信息

java故障案例

 java监控命令

命令(j开头)

jps

jstack

jmap dump

脚本,执行与查看结果即可

1) 命令

a. jps

jps相当于java 的 ps 命令,只显示java进程. 类似于 ps -ef |grep java

jps -lvm|grep tomcat -8081

b.jstack

jstack查看指定pid(java进程)线程信息

进程: process 占空间,占系统资源,厂房.

线程: thread 厂房里面的工人,处理与用户的请求.

多线程技术需要代码实现. 通过ps aux 查看进程是否支持线程(是否使用多线程技术)

先jps过滤出java进程的pid

查看java进程的线程信息

jstack  1786

查看java线程状态:会出现下面几种状态

jstack  1786 |grep -i state

1、新建状态New;

2、就绪状态Runnable;

3、运行状态Running;

4、阻塞状态Blocked(io);

5、死亡状态Dead。

统计java线程状态数量:

jstack 1786 | grep -i state | awk '{print $2}' | sort | uniq -c

15 RUNNABLE
19 TIMED_WAITING
20 WAITING
jmap

2个用途:

  • 输出jvm信息.
  • 输出jvm以文件形式保存下来,导出后通过mat工具分析(ma). 类似于windows电脑死机百分数,读条的过程就是在将内存信息保存到磁盘中的某个位置

dump操作

✅ jmap 导出jvm内存数据保留到本地,通过其他软件分析这个文件。

jmap 查看jvm使用情况

jmap -heap 1786(java进程的pid) 导出java进程的jvm内存使用情况.

⚠未来生产环境该文件较大

jmap -dump:format=b,file=8081.hprof   1786

mat分析工具

jvm内存映像文件,在windows/mac/ubuntu系统下通过MemoryAnalyzer Tool (MA/MAT)

  1. 需要jdk环境
  2. 软件包解压即可使用
  3. MemoryAnalyzer.exe
  4. 下载地址

mat 分析jmap导出的文件:

2) 脚本

show-busy-java-thread.sh 显示当前环境中,所有繁忙的java线程. 以百分数显示使用率最高的前几个线程.

sh show-busy-java-threads.sh

繁忙的线程id号(10进制和16进制)

知晓线程属于的进程

java应用负载高故障

主要还是依靠上面的几条java命令一步步排查,导出jvm后拉开发

exception:java中的异常

Java会话共享方案(比nginx多了个session复制)

Tomcat配置https

下载tomcat使用证书.修改配置文件(配置跳转)

应用建议:

tomcat可以支持https,可以在tomcat中配置https证书.

未来可以在nginx中配置证书加密,tomcat未加密

tomcat配置文件:

<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

<Connector port="8443" 
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/app/tools/tomcat/cert/ssl.linuxjk.cn.pfx"
keystoreType="PKCS12"
keystorePass="AGrnHD9j" 
clientAuth="false"
SSLProtocol="TLSv1.2+TLSv1.3"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"/>

<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" 
directory="logs" 
prefix="localhost_access" 
suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot;%{X-Forwarded-For}i&quot;" />
</Host>
</Engine>
</Service>

说明:关于tomcat其他类型的证书格式配置 jks格式

keystoreFile="/app/tools/tomcat/cert/ssl.oldboylinux.cn.jks"

keystoreType="PKCS12" #删除这一行

keystorePass="AGrnHD9j" #密码

访问测试:https: //ssl.linuxjk.cn:8443

配置tomcat 👉 http8080 👉 https 8443

还需要调整web.xml

web.xml的在文件</welcome-file-list>后添加以下内容

<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>

<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>ssl</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

java前后端分离项目⭐⭐⭐

Tomcat 动静分离.提取出静态资源.

前端:前端开发,UI设计,涉及静态,html,css,js内容.

需要1个桥梁衔接:API接口(电脑的电源开关) 应用程序接口

后端:后端开发,处理动态请求,java/php/python/golang/xxx语言

静态资源:前端(html,css,js).

后端:(Java,PHP,Python,Golang ʢ ) 连接使用数据库.

前后端分离,拆分为前端部分和后端部分,一般前后端通过API接口的进行连接.

API应用程序接口: 开发人员书写好的,可以直接调用的代码.使用的人员不需要关注功能如何实现的,只需要关注如何调用接口即可.

类似于函数,调用api,通过传参获取想要的信息

API接口在各种服务中广泛存在.比如调用天气预报API接口

前端分离

前端(静态资源):API接口(Rest API)

后端(动态功能)

前端,后端下载的代码是源代码

前端代码需要编译,nodejs环境编译👉静态资源(html,css,js)👉>nginx中.

后端代码java, 通过maven/gradle编译👉war包/jar包   运行.

项目概述:部署开源项目:xzs考试系统

1) 机器清单:两台Kylin-SP3,一台web部署前端/后端代码+nginx,一台部署mysql–v8.0

2) 数据库准备(db01)

解压    mysql二进制安装包

配置    安装/工作/数据目录等等

初始化    创建mysql库

管理,连接    登入mysql

创建库

创建用户     1.create    2.grant

导入数据库表与数据(sql文件)

a) 解压+配置
#1.解压,环境准备
mkdir -p /app/tools/ /app/data/3306/ tar xf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /app/tools/ ln -s /app/tools/mysql-8.0.28-linux-glibc2.12-x86_64/ /app/tools/mysql #2.安装依赖(这里Kylin-SP2可能有问题) yum install -y ncurses ncurses-devel libaio-devel openssl openssl-devel #3.配置文件,用户 useradd -s /sbin/nologin -M mysql #4.设置配置文件 cat>/etc/my.cnf<<'EOF' [mysqld] #用户 user=mysql ##安装目录 basedir=/app/tools/mysql/ ##数据目录 datadir=/app/data/3306/ port=3306 socket=/tmp/mysql.sock [client] socket=/tmp/mysql.sock EOF cat /etc/my.cnf #5.修改配置和数据目录的所有者. chown mysql.mysql /etc/my.cnf  chown -R mysql.mysql /app/data/3306 #6.配置PATH环境变量 echo 'export PATH=/app/tools/mysql/bin:$PATH' >>/etc/profile source /etc/profile #7.检查 不提示命令找不到就是正常的. mysql -V
b) 初始化数据库(不需要重复运行,重复运行会报错)
#8.初始化
mysqld --initialize-insecure --user=mysql --basedir=/app/tools/mysql/ --datadir=/app/data/3306 echo $?

--initialize-insecure表示以不安全方式初始化,加上这个表示root用户密码为空;如果不加会输出一个随机的root密码,也会写到日志中

c) 启动

二进制安装的mysql,在安装目录中有启动管理脚本,部署为systemd只需要将脚本放到/etc/init.d/mysqldzz

#9.拷贝已经准备好的启动管理文件
cp /app/tools/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#10.开机自启动服务,运行服务 (有些提示可以忽略)
systemctl enable mysqld
systemctl start mysqld

d) 登录

e) 创建数据库

#11.创建exam数据库并指定字符集.(之前装的wp,zrlog应该在代码里有指定字符集,不需要我们配置;mysql8开始默认的字符集就是UTF-8)
create database exam charset utf8mb4;

f) 添加用户(注意需要先create user )

#12. 创建用户
create user exam@'172.16.1.%' identified with mysql_native_password by '1';
#mysql_native_password mysql8.0指定设置密码插件(算法)
#13. 授权

grant all on exam.* to exam@'172.16.1.%' ;
#14. 测试
mysql -uexam -p1 -h 172.16.1.52

g) 导入数据(创建表,导入数据;等同于wp的页面点点点创建wp-*表)

mysql 库名字 <sql文件
mysql exam <xzs-mysql.sql

h) db02小结

部署数据库

创建库

创建用户

导入sql文件(创建表)

3) 部署后端

 

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部