MySQL 主从复制配置指南
1. 前提
在进行 MySQL 主从复制配置之前,请确保已准备好两台单机 MySQL 实例。如果是使用 Docker 部署,务必使用 host 网络模式。
- 主服务器(Master):192.168.1.10
- 从服务器(Slave):192.168.1.20
2. 安装 MySQL Shell
首先,安装 MySQL Shell,这是 MySQL 官方提供的命令行工具,用于管理 MySQL 数据库和执行复制操作。
wget https://cdn.mysql.com/archives/mysql-shell/mysql-shell-8.0.34-1.el7.x86_64.rpm
yum install mysql-shell -y --nogpgcheck
3. 配置 InnoDB ReplicaSet
3.1 测试连接
使用 MySQL Shell 测试与主服务器的连接:
mysqlsh --mysql -u root -h192.168.1.10 -P3306 -p123456 -C
3.2 查看状态
在 MySQL Shell 中查看服务器状态:
MySQL 192.168.1.10:3306 ssl JS > shell.status()
3.3 修改 Master MySQL 配置并重启
为主服务器修改 MySQL 配置文件 /etc/mysql/my.cnf
:
docker cp mysqlnew8:/etc/mysql/my.cnf /root/my.cnf
echo "server_id=10" >> /root/my.cnf
echo "gtid_mode=ON" >> /root/my.cnf
echo "enforce_gtid_consistency=ON" >> /root/my.cnf
echo "report_host=192.168.1.10" >> /root/my.cnf
docker cp /root/my.cnf mysqlnew8:/etc/mysql/my.cnf
docker restart mysqlnew8
3.4 修改 Slave MySQL 配置并重启
为从服务器修改 MySQL 配置文件 /etc/mysql/my.cnf
:
docker cp mysqlnew8:/etc/mysql/my.cnf /root/my.cnf
echo "server_id=20" >> /root/my.cnf
echo "gtid_mode=ON" >> /root/my.cnf
echo "enforce_gtid_consistency=ON" >> /root/my.cnf
echo "report_host=192.168.1.20" >> /root/my.cnf
echo "read_only=1" >> /root/my.cnf
docker cp /root/my.cnf mysqlnew8:/etc/mysql/my.cnf
docker restart mysqlnew8
3.5 修改 hosts 文件
在两台 MySQL 主机上修改 hosts 文件:
# 添加以下条目
192.168.1.10 mysql-rs-1
192.168.1.20 mysql-rs-2
3.6 初始化第一个实例并创建 ReplicaSet 管理员用户
使用 MySQL Shell 初始化第一个实例并创建 ReplicaSet 管理员用户 rsadmin
:
MySQL 192.168.1.10:3306 ssl JS > dba.configureReplicaSetInstance('root@mysql-rs-1:3306', {clusterAdmin: "'rsadmin'@'%'"})
3.7 创建 ReplicaSet
使用 MySQL Shell 创建一个名为 rstest
的 ReplicaSet:
MySQL 192.168.1.10:3306 ssl JS > var rs = dba.createReplicaSet("rstest")
3.8 初始化第二个实例并创建 ReplicaSet 管理员用户
使用 MySQL Shell 初始化第二个实例并创建 ReplicaSet 管理员用户 rsadmin
:
MySQL 192.168.1.10:3306 ssl JS > dba.configureReplicaSetInstance('root@mysql-rs-2:3306', {clusterAdmin: "'rsadmin'@'%'"})
3.9 连接到副本集并添加第二个实例
连接到 ReplicaSet 并将第二个实例添加到副本集:
MySQL 192.168.1.10:3306 ssl JS > var rs = dba.getReplicaSet()
MySQL 192.168.1.10:3306 ssl JS > rs.addInstance('mysql-rs-2:3306')
3.10 第一次同步
第一次同步选默认 Clone 即可。这个过程可能会很长,请使用 tmux 或类似工具进行操作。
原创内容未经允许禁止转载!!!!!
原创内容未经允许禁止转载!!!!!