若依单机部署
1
| 将ruoyi.tar.bz2、ry_20240601.sql、ruoyi-admin.jar、mysql-5.7.40.tar.bz2拖进来
|
MySQL部署脚本(mysql-5.7.40)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
| #!/bin/bash
# ==========================================
# 步骤 1: 清理旧环境 (Clean up)
# ==========================================
echo "正在停止数据库服务并清理旧环境..."
systemctl stop mysqld
systemctl stop mysql
systemctl stop mariadb
# 强制杀掉可能卡住的进程
pkill -9 mysqld
pkill -9 mysqld_safe
# 卸载相关包
yum remove -y mysql-community-*
yum remove -y mysql* MySQL*
yum remove -y mariadb*
# 删除旧的数据和配置文件
# 注意:这会清空 /data/mysql 下的所有数据,请确保已备份
rm -rf /data/mysql
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf*
rm -rf /var/log/mysqld.log
echo "环境清理完成。"
# ==========================================
# 步骤 2: 安装软件 (Install)
# ==========================================
echo "开始安装 MySQL..."
# 检查安装包是否存在 (防止脚本报错)
if [ ! -f "mysql-5.7.40.tar.bz2" ]; then
echo "错误: 当前目录下未找到 mysql-5.7.40.tar.bz2 文件!"
exit 1
fi
tar xvf mysql-5.7.40.tar.bz2
yum localinstall -y mysql-5.7.40/*
# ==========================================
# 步骤 3: 写入配置文件 (Configuration)
# ==========================================
echo "正在写入配置文件..."
cp -ar /etc/my.cnf{,.backup} 2>/dev/null
# --- 以下内容为你指定的配置,未做任何改动 ---
cat > /etc/my.cnf << EOF
[mysql]
#定义MySQL监听端口
port=3306
#定义MySQL监听IP地址
bind-address=0.0.0.0
[mysqld]
#定义MySQL字符集
character_set_server=utf8
init_connect='SET NAMES utf8'
#定义程序用户
user = mysql
#定义sock路径
socket=/var/lib/mysql/mysql.sock
#定义MySQLdata路径
datadir=/data/mysql/data
#定义MySQL最大链接
max_connections = 2000
#relay-log的结构和binlog非常相似,只不过他多了一个master.info和relay-log.info的文件。
#master.info记录了上一次读取到master同步过来的binlog的位置,以及连接master和启动复制必须的所有信息。
#relay-log.info记录了文件复制的进度,下一个事件从什么位置开始,由sql线程负责更新。
relay-log=/data/mysql/data/relay-log
#binlog的主要作用是记录数据库中表的更改,它只记录改变数据的sql
log-bin=/data/mysql/data/mysql-bin
#定义最大binlog大小
max_binlog_size = 500M
#为每个session分配内存,事务中用于二进制日志缓存存储,默认32K,提高bin_log的效率
binlog_cache_size = 128K
#定义无需主从同步的数据库,多个数据库需要重复设置于bin-do-db相反。
binlog-ignore-db = mysql
#MySQL-binlog保存时间
expire_logs_days = 7
#定义binlog格式
binlog_format="ROW"
#server-id集群标识不能重复
server-id=1
#跳过外部锁定用于多进程条件下为MyISAM数据表进行锁定
skip-external-locking
#禁用dns解析,此处如果禁用授权仅可授权ip
skip-name-resolve
#不添加log-slave-updates参数,从库从主库复制的数据不会写入log-bin日志文件里
#开启log-slave-updates参数后,从库从主库复制的数据会写入log-bin日志文件里,数据量过大会导致主从同步变慢
#log-slave-updates=1
#从服务器可能会遇到执行BINLOG中的SQL出错的情况lave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号
slave-skip-errors=1
#配置文件会限制server接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。
max_allowed_packet = 100M
#忽略表明大小写
lower_case_table_names=1
#开启慢查询日志
slow_query_log=on
#定义慢查询日志路径
slow_query_log_file=/data/mysql/logs/slow_query_log.log
#定义慢查询日志触发时间
long_query_time=2
#是否只支持软连接=0表示不开启
symbolic-links=0
#MySQL-errorlog路径
log-error=/data/mysql/logs/mysql.err
#定义MySQL-SQLmodule
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#单个host链接错误次数等于max_connect_errors(默认10)
max_connect_errors = 100
###innodb优化参数
#默认8M可根据项目实际情况调整
innodb_buffer_pool_size=128M
#限制Innodb能打开的表的数据。根据库内表数量进行调整。默认300
innodb_open_files=800
[mysqld_safe]
#定义pid文件路径
pid-file=/var/run/mysqld/mysqld.pid
#error-log路径
log-error=/data/mysql/logs/mysql.err
EOF
# --- 配置写入结束 ---
# ==========================================
# 步骤 4: 目录初始化与权限 (Directory & Init)
# ==========================================
echo "正在配置目录和权限..."
# 创建数据目录和日志目录
mkdir -pv /data/mysql/{data,logs}
# 【重要修复】创建 Socket 目录
# 配置文件里写了 socket=/var/lib/mysql/mysql.sock,如果不创建此目录,启动会报错
mkdir -pv /var/lib/mysql
# 修改权限
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /var/lib/mysql/
# 确保必要的 SELinux 工具已安装 (防止 semanage 命令未找到)
if ! command -v semanage &> /dev/null; then
echo "正在安装 policycoreutils-python 以支持 SELinux 管理..."
yum install -y policycoreutils-python || yum install -y policycoreutils-python-utils
fi
# ==========================================
# 步骤 5: 数据库初始化 (Initialize DB)
# ==========================================
echo "正在初始化数据库 (这可能需要几秒钟)..."
# 【关键修复】手动执行初始化
# 使用 --initialize 会生成随机密码,记录在 log-error 文件中
mysqld --initialize --user=mysql --datadir=/data/mysql/data
if [ $? -ne 0 ]; then
echo "错误: 数据库初始化失败!请检查 /data/mysql/logs/mysql.err"
exit 1
fi
# ==========================================
# 步骤 6: 启动与 SELinux (Startup)
# ==========================================
echo "正在处理 SELinux 并启动服务..."
# 先临时关闭 SELinux 以确保服务能顺利启动
setenforce 0
# 设置 SELinux 上下文 (如果开启了 SELinux)
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" 2>/dev/null
restorecon -Rv /data/mysql
# 启动服务
systemctl start mysqld
systemctl enable mysqld
# 恢复 SELinux (可选,如果不想恢复可注释掉)
# setenforce 1
# ==========================================
# 步骤 7: 结果验证 (Verification)
# ==========================================
echo "----------------------------------------------------"
# 检查服务状态
if systemctl is-active --quiet mysqld; then
echo "✅ MySQL 启动成功!"
echo "数据库文件路径: /data/mysql/data"
echo "Socket 文件路径: /var/lib/mysql/mysql.sock"
# 提取临时密码
echo "----------------------------------------------------"
echo "正在获取 root 初始密码..."
temp_password=$(grep 'temporary password' /data/mysql/logs/mysql.err | awk '{print $NF}')
if [ -n "$temp_password" ]; then
echo "Root 初始密码: $temp_password"
else
echo "未找到临时密码,请手动查看日志: cat /data/mysql/logs/mysql.err"
fi
echo "----------------------------------------------------"
echo "请使用以下命令登录并修改密码:"
echo "mysql -uroot -p -S /var/lib/mysql/mysql.sock"
else
echo "❌ MySQL 启动失败。"
echo "请查看详细日志: cat /data/mysql/logs/mysql.err"
systemctl status mysqld -l
fi
|
1
2
3
4
5
6
7
8
9
10
11
| ALTER USER 'root'@'localhost' IDENTIFIED BY '123123';
FLUSH PRIVILEGES;
create database ruoyi_demo character set utf8;
CREATE USER 'ruoyi_demo'@'%' IDENTIFIED BY '123123';
GRANT ALL PRIVILEGES ON ruoyi_demo.* TO 'ruoyi_demo'@'%';
FLUSH PRIVILEGES;
use ruoyi_demo;
source /root/ry_20240601.sql;
exit
|
1
| systemctl stop firewalld && systemctl disable firewalld
|
第一步:修改配置文件
若依项目打包在 Docker 镜像里之前,必须把数据库连接信息写死在配置文件里。一旦配置文件修改,必须重新构建镜像。
进入目录:
1
| cd /ruoyi_demo/Dockerfile/project/
|
编辑配置文件:
1
| vi application-druid.yml
|
(注:如果这里没有 druid 文件,就编辑 application.yml,根据你之前的 ls 记录,是有这个文件的)
核对关键信息(按 i 编辑):
确保 url、username、password 三项完全匹配你刚才设置的 MySQL 信息。
YAML
1
2
3
4
5
6
7
8
9
10
11
| spring:
datasource:
druid:
master:
# 1. 确保 IP 是本机 192.168.200.104
# 2. 确保数据库名是 ruoyi_demo (或者 ry_20240601,看你导入时的名字)
url: jdbc:mysql://192.168.200.104:3306/ruoyi_demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
# 3. 用户名(你刚才创建并授权成功的用户)
username: ruoyi_demo
# 4. 密码(你刚才设置的密码)
password: 你的密码
|
修改无误后,按 Esc,输入 :wq 保存退出。
第二步:清理旧环境(非常重要)
为了防止旧的配置或错误的容器干扰,我们需要先“打扫战场”。
停止并删除旧容器:
1
2
| docker stop ruoyi-admin
docker rm ruoyi-admin
|
删除旧镜像(确保刚才修改的配置文件能生效):
第三步:重新构建镜像
回到 Dockerfile 所在目录:
1
| cd /ruoyi_demo/Dockerfile/
|
执行构建命令(注意最后有个点):
1
| docker build -t ruoyi-admin .
|
等待出现 Successfully tagged ruoyi-admin:latest 即为成功。
第四步:启动容器(核心修正点)
根据刚才的日志 ProtocolHandler ["http-nio-80"],我们确定若依内部端口是 80,我们要把它映射到外部的 8080。
执行启动命令:
1
| docker run -d --name ruoyi-admin -p 8080:80 ruoyi-admin
|
-d: 后台运行-p 8080:80: 这是最关键的一步。左边 8080 是你浏览器访问的端口,右边 80 是容器内部若依的端口。
第五步:最终验证
查看日志(可选):
1
| docker logs -f ruoyi-admin
|
看到大的字符画 RuoYi 和 Started RuoYiApplication 说明启动成功。按 Ctrl+C 退出日志查看。
浏览器访问:
打开浏览器输入:
http://192.168.200.104:8080
你应该能看到若依的登录页面了!如有验证码显示不出来,通常是数据库连不上,请检查第一步的密码。