项目目的
本项目旨在在Rocky Linux系统上配置并运行多个MySQL8.0实例(3306、3307、3308端口),实现数据库服务的多实例隔离部署。
系统准备
1.系统前期准备
关闭selinux
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#修改selinux文件后重启
reboot
2. 系统更新与MySQL安装
# 更新系统
yum update
# 安装MySQL服务器
yum install mysql-server
3. 确认MySQL用户
id mysql
预期输出:
用户id=27(mysql) 组id=27(mysql) 组=27(mysql)
4. 检查默认MySQL服务状态
systemctl status mysqld
预期应为未激活状态。
多实例配置
1. 创建目录结构
mkdir -pv /data/mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
chown -R mysql:mysql /data/mysql/
目录结构:
/data/
└── mysql
├── 3306
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
├── 3307
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
└── 3308
├── bin
├── data
├── etc
├── log
├── pid
└── socket
2. 初始化数据目录
# 清理旧数据
rm -rf /data/mysql/3306/data/*
rm -rf /data/mysql/3307/data/*
rm -rf /data/mysql/3308/data/*
# 初始化实例
#--initialize-insecure生成一个无密码的用户
#--user=mysql 使用mysql用户进行初始化
#--datadir=/data/mysql/3306/data 指定目录
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/3306/data
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/3307/data
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/3308/data
3. 验证数据生成
ls /data/mysql/3306/data
ls /data/mysql/3307/data
ls /data/mysql/3308/data
配置文件设置
1. 主配置文件(3306实例)
cat >/data/mysql/3306/etc/my.cnf <<-EOF
[mysqld]
port=3306
datadir=/data/mysql/3306/data/
socket=/data/mysql/3306/socket/mysql.sock
log-error=/data/mysql/3306/log/mysql.log
pid-file=/data/mysql/3306/pid/mysql.pid
EOF
2. 复制配置到其他实例
for i in 7 8; do
cp -a /data/mysql/3306/etc/my.cnf /data/mysql/330${i}/etc/my.cnf
sed -i "s#3306#330${i}#g" /data/mysql/330${i}/etc/my.cnf
done
3. 添加绑定地址(可选)
for i in 6 7 8; do
echo "bind-address = 0.0.0.0" >> /data/mysql/330${i}/etc/my.cnf
done
Systemd服务配置
1. 创建基础服务文件(3306实例)
cat > /etc/systemd/system/mysqld-3306.service <<-EOF
[Unit]
Description=MySQL Server for port 3306
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/data/mysql/3306/etc/my.cnf
LimitNOFILE=5000
Restart=on-failure
RestartSec=10s
RuntimeDirectory=mysqld_3306
[Install]
WantedBy=multi-user.target
EOF
2. 复制服务文件到其他实例
for i in 7 8; do
cp -a /etc/systemd/system/mysqld-3306.service /etc/systemd/system/mysqld-330${i}.service
sed -i "s#3306#330${i}#g" /etc/systemd/system/mysqld-330${i}.service
done
3. 重载systemd配置
systemctl daemon-reload
实例管理
1. 启动所有实例
systemctl start mysqld-3306
systemctl start mysqld-3307
systemctl start mysqld-3308
2. 设置开机自启
systemctl enable mysqld-3306
systemctl enable mysqld-3307
systemctl enable mysqld-3308
3. 连接MySQL实例
# 连接3306实例
mysql -u root -p -S /data/mysql/3306/socket/mysql.sock
# 连接3307实例
mysql -u root -p -S /data/mysql/3307/socket/mysql.sock
# 连接3308实例
mysql -u root -p -S /data/mysql/3308/socket/mysql.sock
注意事项
- 使用
--initialize-insecure
初始化会创建空密码root账户,生产环境应使用--initialize
- 每个实例会独立消耗系统资源,请根据服务器配置合理分配
- 多实例环境下,备份恢复操作需要指定对应的数据目录和配置文件
- 如需远程访问,需配置防火墙规则开放对应端口
排错指南
验证目录权限:确保所有数据目录属主为mysql用户
检查日志文件:/data/mysql/<端口>/log/mysql.log
验证服务状态:systemctl status mysqld-<端口>
检查端口监听:netstat -tulnp | grep <端口>