目录
Toggle目录导图
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
实现方法:
- 关闭tomcat(防止移走ROOT目录后默认生成ROOT目录)
- 将webapps/目录下的ROOT/ 转移走(删除也可以)
- zrlogxxx.war 改名为 ROOT.war
- 运行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 "%r" %s %b "%{Referer}i""%{User-Agent}i" "%{X-Forwarded-For}i"" /> </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 "%r" %s %b "%{Referer}i""%{User-Agent}i" "%{X-Forwarded-For}i"" /> </Host> </Engine> </Service> </Server>
规范tomcat访问日志格式(server.xml)
pattern="%h %l %u %t "%r" %s %b "%{Referer}i""%{User-Agent}i" "%{X-Forwarded-For}i""
这里和nginx的日志定义类似,"
就代表” 每个变量直接可以加空格
tomcat虚拟主机配置,与nginx对比
tomcat配置多站点方式
虚拟主机(Virtual Host),类似nginx
适用于常规用户,更常用、更符合生产环境需求的方式
在一个Tomcat实例中,通过配置一个Engine
下的多个Host
元素来实现。多个站点共享同一个Tomcat进程和端口,Tomcat会根据HTTP请求头中的Host
字段(即域名)来决定将请求转发给哪个站点。
优点:
- 资源占用少:所有站点运行在同一个JVM进程中。
- 管理方便:只需维护一套Tomcat配置。
- 使用标准端口:所有站点都可以使用80或443端口,通过域名区分。
缺点:
- 隔离性差:所有应用共享同一个Tomcat容器,某个应用的内存泄漏或异常可能会影响到其他所有应用。
- 单点故障:Tomcat进程崩溃,所有站点都不可用。
虚拟主机方式用户请求流程:
- 请求与8080端口连接
- 域名与Host部分的Name进行匹配,匹配成功则使用对应的虚拟主机.匹配失败则使用Engine部分defaultHost指定的默认的虚拟主机进行处理.
- 如果之前部署的时候将webappps里的ROOT目录删除,将项目名字改成ROOT,同时配置文件里写的站点目录还是webapps,那么localhost就会访问这个ROOT里面的内容;所以还是建议部署应用时,不装到webapps里,指定其他目录,将指定的目录中的ROOT替换成站点目录
安装多个tomcat配合不同端口(多实例)
这种适用于服务器配置豪华,一个tomcat吃不满性能,配置多实例,是最经典、隔离性最好的方法
每个Tomcat都有自己的conf
、webapps
、logs
等目录,彼此完全隔离。安装后修改监听端口
优点:
- 隔离性强:一个站点的崩溃、配置错误或高负载不会影响其他站点。
- 安全性好:可以为每个实例配置不同的运行用户和权限。
- 管理清晰:更新、重启、调试单个站点不会干扰他人。
缺点:
- 资源占用多:每个实例都是一个独立的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)
- 需要jdk环境
- 软件包解压即可使用
- MemoryAnalyzer.exe
- 下载地址
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 "%r" %s %b "%{Referer}i" "%{User-Agent}i" "%{X-Forwarded-For}i"" /> </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) 部署后端