mysql 主备切换
情况一: 主备均可用,进行主备切换。数据不丢失。
主备正常切换,此场景主要是针对在主备同步复制正常的情况下进行。可用于灾备演练、计划性的主备切换等。
注意:如果不需要应用程序修改连接数据库的IP。则主备IP 需要调换。
1. 切断应用对主库的访问
2. 主库及备库均设置为只读状态
set global read_only=ON;
set global super_read_only=ON;
3. 查看主备同步状态
3.1 查看备库复制进程状态
show slave status\G
确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0, 则代表两边数据一致
3.2 比对主备两边的GTID是否一致(如果使用gtid方式同步)
主库执行:
SELECT @@gtid_executed;
备库执行:
SELECT GTID_SUBSET('4bd6e737-120e-11ed-9c82-286ed488c7c5:1-75416195', @@gtid_executed);
输出的结果为1,代表两边数据一致
注意: 4bd6e737-120e-11ed-9c82-286ed488c7c5:1-75416195 是上面主库输出的值
4. 从库停掉复制进程并清空主从同步信息
stop slave;
reset slave all;
5. 从库开启读写,转为新主库
set global read_only=off;
set global super_read_only=off;
注意:根据实际情况,备库部分参数要考虑是否要与原主库一致
6. 原主库设置为新备库,完成主从切换
CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PORT=3306,MASTER_PASSWORD='xxx',master_auto_position=1 ;
注意:是否使用gtid 同步,需要根据实际情况而定
start slave;
show slave status\G
7. 启用应用访问数据库
情况二: 主库宕机,备库切换为主库。可能会丢失部分数据。
1. 查看备库复制进程状态
show slave status\G
Seconds_Behind_Master 记录输出值
2. 从库停掉复制进程并清空主从同步信息
stop slave;
reset slave all;
3. 从库开启读写,转为新主库
set global read_only=off;
set global super_read_only=off;
4. 修改IP为原主库的IP
注意:如果有数据丢失,且可以获取主库的binlog 信息。后续慢慢修复。。。
发表评论