Docker MySQL 9 主从复制集群,切换主从【主从正常切换】
主节点:192.168.0.2,数据挂载目录:/data/mysql,数据库版本:MySQL 9.5.0,编号:A
从节点:192.168.0.3,数据挂载目录:/data/mysql,数据库版本:MySQL 9.5.0,编号:B
Docker MySQL 9 主从复制集群,切换主从。 从节点提升为主,主节点降低为从。
一、冻结A主库写入,保证数据不再变化(最关键一步)
在A原主库执行
|
1 2 |
SET GLOBAL read_only = ON; SET GLOBAL super_read_only = ON; |
二、确认B从库追平主库
在B从库执行
|
1 2 3 4 5 6 7 8 9 |
SHOW REPLICA STATUS\G # 确认,Seconds_Behind_Source不为0不能切 Replica_IO_Running: Yes Replica_SQL_Running: Yes Seconds_Behind_Source: 0 # 停止B从库复制 STOP REPLICA; |
三、提升B原从库为主库
在B上执行
|
1 2 |
SET GLOBAL read_only = OFF; SET GLOBAL super_read_only = OFF; |
四、让 A 变成 B 的从库
在A上执行
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
STOP REPLICA; RESET REPLICA ALL; CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.0.3', SOURCE_USER='replicator', SOURCE_PASSWORD='replicator_2025', SOURCE_AUTO_POSITION=1; START REPLICA; # 查看复制状态 SHOW REPLICA STATUS\G |
主从切换完成!
注意:
如果原主库A已经挂掉,需要紧急切主。直接提升从库 B
|
1 2 3 4 5 |
# B立即变为主库 STOP REPLICA; SET GLOBAL read_only = OFF; SET GLOBAL super_read_only = OFF; |
缺点:虽GTID 能最大限度减少丢失,但仍可能丢最后一点数据,需要补数据最大限度减少数据丢失。