23-切换主从库
假设有一个复制的环境,一个主数据库服务器M,两个从数据库服务器S1、S2同时指向主数据库服务器 M。当主数据库M因为某种原因出现故障时,需要将其中的一个从数据库服务器(假设选中 S1)切换成主数据库服务器,同时修改另一个从数据库(S2)的配置,使其指向新的主数据库(S1)。此外还需要通知应用修改主数据库的IP地址,如果可能,将出现故障的主数据库(M)修复或者重置成新的从数据库。
下面详细介绍一下切换主从库的操作步骤。
(1)首先要确保所有的从数据库都已经执行了 relay log中的全部更新,在每个从库上,执行STOP SLAVE IO_THREAD,然后检查SHOW PROCESSLIST的输出,直到看到状态是Has read all relay log,表示更新都执行完毕。
mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW PROCESSLIST \G
1. row
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 4137
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
2. row
…
2 rows in set (0.00 sec)
(2)在从数据库S1上,执行STOP SLAVE以停止从服务,然后执行RESET MASTER以重置成主数据库:
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.06 sec)
(3)在S2上,执行STOP SLAVE以停止从服务,然后执行CHANGE MASTER TO MAS TER_HOST = 'S1'以重新设置主数据库,再执行START SLAVE以启动复制:
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.1.101';
Query OK, 0 rows affected (0.05 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(4)通知所有的客户端将应用指向S1,这样客户端发送的所有的更新语法写入到S1的二进制日志。
(5)删除新的主数据库服务器上的master.info和relay-log.info文件,否则下次重启时还会按照从库启动。
(6)最后,如果M服务器可以修复,则可以按照S2的方法配置成S1的从库。
注意:上面测试的步骤是默认S1是打开log-bin选项的,这样重置成主数据库后可以将二进制日志传输到其他从库。其次,S1上没有打开log-slave-updates参数,否则重置成主数据库后,可能会将已经执行过的二进制日志重复传输给S2,导致S2的同步错误。