> 文章列表 > MySQL运维31-基于已有从库在线搭建从库

MySQL运维31-基于已有从库在线搭建从库

MySQL运维31-基于已有从库在线搭建从库

文章目录

  • 1、在线的含义
  • 2、基于已有从库在线搭建从库的思路
  • 3、基于已有从库在线搭建从库的步骤
  • 4、总结

1、在线的含义

所谓在线,就是不停机。所以基于已有从库在线搭建从库,就是对旧从库不停机,搭建新从库。我们之前的方式是通过关闭旧从库复制数据文件的方式搭建新从库,这显然不是在线的方式。

2、基于已有从库在线搭建从库的思路

如果旧从库不能关闭,那么我们一般采取关闭旧从库的Slave的SQL线程,然后导出数据的方式制作新从库。关闭从库的复制SQL线程后,从库将不再被更新,这个时候,可以认为我们获得了一个一致性的快照。

3、基于已有从库在线搭建从库的步骤

  1. 旧从库操作:关闭Slave的SQL线程并获取SHOW SLAVE STATUS的信息。
mysql> STOP SLAVE SQL_THREAD;
mysql> SHOW SLAVE STATUS \\G;
  1. 旧从库操作:对于SHOW SLAVE STATUS命令的输出,我们关注的是如下两项。新的从库应该从主库的这两个位置开始重新同步。
Relay_Master_Log_File
Exec_Master_Log_Pos
  1. 旧从库操作:导出数据库,命令如下:
shell> mysqldump   --master-data=2  --all-databases > dumpfile
  1. 旧从库操作:重新启动Slave:
mysql> START SLAVE;
  1. 新从库操作:向新的slave机器导入数据:
shell> mysql < dumpfile
  1. 新从库操作:对新的slave实例,运行如下命令试行同步,file_name、file_pos就是我们第2个步骤中记录的Relay_Master_Log_File和Exec_Master_Log_Pos的值。
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.124.171',
MASTER_PORT=3306,
MASTER_USER='replic_user',
MASTER_PASSWORD='000000',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=635;mysql> START SLAVE;

4、总结

  1. 如果要基于已有从库搭建新从库但是已有从库又不能关闭的时候,可以通过关闭旧从库的SQL线程停止执行新的复制,然后再和之前离线一样,通过mysqldump生成一致性备份,然后通过对中继日志的观察,获得中继日志的执行位置,再在新从库上从旧从库的中继日志执行位置开始继续复制。