- 适用架构:M-M
- 版本5.6或5.7,需重启从数据库进程,原因是当前MySQL 5.6和5.7 从库 不会同步主库“自增字段”的auto_increment的值。
- MySQL 8.0+无需重启数据从库进程
1、重启 从库 mysql 进程
service mysqld restart
ps -ef|grep mysqld
2、重启后,进入数据库检查主从复制是否正常
show slave status\G
3、开始进行切换
① 把主库设置为只读模式
set global read_only = on;
show variables like '%read_only%';
- # 把my.cnf配置文件的 read_only = on;
② 主库检查master状态信息,记录binlog文件名和位置点
show master status;
mysql> show master status;
+------------------------+----------+--------------+------------------+---------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------------+----------+--------------+------------------+---------------------------------------------+
| jaspondb-binlog.000001 | 470975 | | | 79120f4b-eb8f-11ec-8a69-000c2927da2f:1-1180 |
+------------------------+----------+--------------+------------------+---------------------------------------------+
③ 检查从库状态信息及主从同步位点是否一致
show slave status\G
- Master_Log_File: jaspondb-binlog.000001 # 主节点的二进制文件名
- Read_Master_Log_Pos: 470975 # 主节点的位点
- Exec_Master_Log_Pos: 470975 # 从节点SQL线程还原的位点
- # 确认主从同步位点完全相同。
④ 把主库VIP移除(系统处同事操作)
ifconfig eth0:1 $VIP netmask 255.255.255.0 down
- # 把/etc/autostart.sh中的ifconfig eth0:1 $VIP netmask 255.255.255.0 down注释
- # 检查VIP是否已移除
ip a
⑤ 在从库启用VIP(系统处同事操作)
ifconfig eth0:1 $VIP netmask 255.255.255.0 up
- # 把 ifconfig eth0:1 $VIP netmask 255.255.255.0 up 添加到/etc/autostart.sh中
- # 检查VIP是否在从库已生效
ip a
4、把“从库”的read_only关闭
set global read_only = OFF;
show variables like '%read_only%';
# 把my.cnf配置文件的 read_only = off ;
5、切换完成,通知应用管理员主从切换完成,应用可以正常访问。
6、登陆数据检查“主从同步”是否正常,检查配置文件的 read_only参数与show variables like '%read_only%';是否一致。
show variables like '%read_only%';
grep "read_onl" my.cnf