当前系统情况

主库:10.100.4.226

从库:10.100.4.224,10.100.4.227

现在想把主库切换到10.100.4.227

需要执行下面的操作

1. 创建主从同步用户 
   
在224和227上创建同步账户(226已经有了和227的同步账户) 
   
在227上执行: 
   
mysql>grant all privileges on *.* to 'repl'@'10.100.4.224' identified by 'repl' with grant option; 
   
在224上执行: 
   
mysql>grant all privileges on *.* to 'repl'@'10.100.4.227' identified by 'repl' with grant option;

2. 修改机器标志

修改3台机器的my.cnf文件 
   
新主库227 
   
server-id = 1 
   
旧主库226 
   
server-id = 3 
   
旧从库224不用修改,保持原来的就行了,只要不重。 
   
my.cnf中的其他设置不用修改。

3. 设置同步位置

在新主库227上执行:show master status; 
   
mysql> show master status; 
   
+------------------+----------+--------------+--------------------------+ 
   
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | 
   
+------------------+----------+--------------+--------------------------+ 
   
| mysql-bin.000001 |       98 | test         | mysql,information_schema |  
   
+------------------+----------+--------------+--------------------------+ 
   
1 row in set (0.00 sec) 
   
记住File和position的值。

4. 建立关联

为了避免风险,新主库mysql现在最好不要对外提供服务,就是说主mysql的已有数据不要在动了。 执行下面锁表的命令:
 mysql> flush tables with read lock; 
   Query OK, 0 rows affected (0.00 sec) 
   
 
   
把两个从库224和226都停掉,从主库中复制数据到两个从库,直接压缩主库数据库的目录test,然后传到两个从库上解压就可以了

5. 启动主从

启动从库224和226的数据, 
   
在224上 
   
先执行停止slave的命令 
   
mysql> stop slave; 
   
Query OK, 0 rows affected (0.00 sec) 
   
然后执行 
   
mysql> change master to  master_host='10.100.4.227',master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=98; 
   
然后执行 
   
mysql> start slave; 
   
 
   
在226上 
   
先执行: 
   
mysql> change master to master_host='10.100.4.227',master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=98; 
   
然后执行 
   
mysql> start slave; 
   
 
   
启动主库227上的mysql 
   
先执行 
   
mysql>unlock tables;解除锁表 
   
在slave端执行:show slave status \G ;  
   
察看Slave_IO_State,一般应该为"Waiting for master to send event"; 
   
此时Slave_IO_Running和Slave_SQL_Running应该为yes,如果不是,在slave端执行: stop slave; start slave; 重启复制进程。 
   
Replicate_Do_DB为要复制的数据库,和my.cnf配置的相同。 
   
在master端执行: 
   
mysql> show master status;  
   
对比File, Position的值和上面slave端的Master_Log_File,Read_Master_Log_Pos,两边相同则表示搭建完成。

6. 测试

在主库227上执行建表,插入,删除,修改等操作,看看slave是否同步了。

停掉salve,然后执行上面的操作,然后启动从库,看看是否同步了。