需求:192.168.0.105的主服务器为192.168.0.103,需要把192.168.0.105的主服务器从192.168.0.103切换到192.168.0.109。


步骤:

停止192.168.0.103和192.168.0.109时检查双方的binlog的位置。因为二者的位置指向同一台Master上的位置,192.168.0.103和192.168.0.109二者都连接到同一台Master上,可以仅仅根据比较文件名和按照字典顺序的字节位置来检查双方的二进制日志的位置。


在192.168.0.103上

mysql>show slave status\G;

…….

Relay_Master_Log_File:mysql-bin.000289

…….

Exec_Master_Log_Pos:398316516

1row in set (0.00 sec)


在192.168.0.109上

mysql>show slave status\G;

…….

Relay_Master_Log_File:mysql-bin.000289

…….

Exec_Master_Log_Pos:398634996

1row in set (0.00 sec)

在这种情况下,192.168.0.109是超前Slave,所以只要写入192.168.0.109的位置,并启动运行192.168.0.103上的slave进程直到它赶上192.168.0.109。为了让192.168.0.103赶上192.168.0.109,并在正确的位置停止,使用start slave until命令。


在192.168.0.103上操作

start slave until master_log_file='mysql-bin.000289',master_log_pos=398634996;

select master_pos_wait('mysql-bin.000289', 398634996);


192.168.0.103和192.168.0.109现在已经精确地停在相同的位置上,一切就绪后,切换到192.168.0.109上,在192.168.0.105上用change master to命令切换到192.168.0.109上


因为192.168.0.109在停止运行点记录的文件和位置与192.168.0.103在同一点记录的文件和位置是完全不同的,有必要去获取当192.168.0.109记录更改时记录的位置。为了做到这一点,在192.168.0.109上运行show master status命令。


在192.168.0.109上操作:show master status,得到记录的文件和位置;


在192.168.0.105上操作:

1、停止同步:stop slave;

2、把slave重定向到192.168.0.109上

changemaster to master_host='192.168.0.109', master_port=3307,master_user='xxxxxx',master_password='xxxxxx',master_log_file='mysql-bin.000192',master_log_pos=382049357;

3、启动同步:start slave;