当前位置:嗨网首页>书籍在线阅读

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的同步错误。