Rocky系统部署MySQL8多实例
Rocky系统部署MySQL8多实例

Rocky系统部署MySQL8多实例

项目目的

本项目旨在在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

注意事项

  1. 使用--initialize-insecure初始化会创建空密码root账户,生产环境应使用--initialize
  2. 每个实例会独立消耗系统资源,请根据服务器配置合理分配
  3. 多实例环境下,备份恢复操作需要指定对应的数据目录和配置文件
  4. 如需远程访问,需配置防火墙规则开放对应端口

排错指南

验证目录权限:确保所有数据目录属主为mysql用户

检查日志文件:/data/mysql/<端口>/log/mysql.log

验证服务状态:systemctl status mysqld-<端口>

检查端口监听:netstat -tulnp | grep <端口>


											

发表回复

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