`
丁林.tb
  • 浏览: 789565 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL主从严重延迟后迁移Transfer的注意事项

阅读更多

MySQL-Transfer逐渐有一些其他公司的同学在使用,这里会持续更新运维上的注意事项。

      

背景

       正常情况下,若要从原来的主从切换成Transfer 模式,只需要作如下步骤:

1、slave相同机器上部署一个Transfer,并配置好各种remote_slave参数

2、slavestop slave

3、slave的表结构dumptransfer

4、slave中查看当前执行到master的位置

5、transfer执行change master xxxxx; start slave 即可。

 

状况描述

       线上某个项目主从延迟很多天(>7)。由于主库的binlog只保存一周,导致在要切换到Transfer的时候,从slaveshow slave status得到的master_log_file在主库已经不存在了。

       这样无法通过上述的步骤5来实现切换到原来的位置。

 

有同学要问,这样的情况下,原来的主从怎么保证最终一致性?

实际上从库上是有两个线程协同工作的,io_thread 已经把主库的更新命令都接收并保存在本地的relay-log了。 只是sql_thread处理速度太慢没有执行这些命令而已。

 

注意

需要特别注意:change master是会删除本地的relay log的。因此在上面的情况下,执行change master要谨慎,以防主库没有binlog的情况下删除备库的relaylog

 

解决方案

       从上面的说明看出,Slave上其实有足够的信息能够重放主库的命令(relaylog).因此在切换到transfer时需要换一个步骤:

1、 slave相同机器上部署一个Transfer,并配置好各种remote参数

2、slavestop slave

3、slave的表结构dumptransfer

(前面几个步骤不变)

4、slave上的master.info master.info mysqld-relay-bin.* (就是跟从库有关的数据) 都拷贝到transfer的对应目录下

5、transfer直接执行start slave (重申,不能change master)

 

由于transfer重新启动以后,读到的是从slave上拷贝过来的数据,因此以为是之前自己的io_thread已经读取的数据,start以后就“继续”读取relaylog来更新slave

 

情况还可能更糟

       如果这时候刚好主库出了点什么问题,导致连都连不了。那么上面改进步骤的第5点,就改成start slave sql_thread,这样tranfer不连主库,先把本地的relaylog都重放一遍。

      

     Btw一下,start slave sql_thread这么犀利的命令不属于transfer patch的代码,MySQL本身就支持了

 

2
0
分享到:
评论
5 楼 丁林.tb 2014-05-16  
232425005 写道
transfer 用的mysql版本 和 slave的mysql版本不同的情况下可以使用吗?

你说的是使用transfer模式吧?用这个模式就与版本无关了
4 楼 232425005 2014-05-08  
transfer 用的mysql版本 和 slave的mysql版本不同的情况下可以使用吗?
3 楼 aeoluspu 2013-05-07  
丁奇大神  ,淘宝 有多少主从在用 mysql transfer ?
2 楼 丁林.tb 2012-10-28  

您是用的这个链接 http://dinglin.iteye.com/blog/1672742#bc2286614 里的最新版本吗(10.18).
先确认一下是不是slave停了,
若不是而且用了最版本还有问题请发微薄私信给我 @淘宝丁奇
1 楼 peterpxg 2012-10-26  
我是直接替换 mysqld文件之用的;
版本是 Percona-Server-5.5.18;
运行了一段时间之后出现 Slave_SQL_Running线程异常:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.100.101' (111)
ERROR:
Can't connect to the server

相关推荐

Global site tag (gtag.js) - Google Analytics