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

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

      

背景

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

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

2、在slave上stop slave

3、把slave的表结构dump给transfer

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

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

 

状况描述

       线上某个项目主从延迟很多天(>7)。由于主库的binlog只保存一周,导致在要切换到Transfer的时候,从slave上show 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、在slave上stop slave

3、把slave的表结构dump给transfer

(前面几个步骤不变)

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本身就支持了

时间: 2024-10-22 22:30:54

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

使用MySQL Proxy解决MySQL主从同步延迟

  MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方 面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的,而且由于服务器负 载.网络拥堵等方面的原因,Master与Slave之间的数据同步延迟是完全没有保证的.短在1秒内,长则几秒.几十秒甚至更长都有可能. 由于数据延迟问题的存在,当应用程序在Master上进行数据更新,然后又立刻需要从数据库中读取数据时,这时候如果应用程序从Slave上取数据(这也

MySQL主从同步加速 Transfer-- FAQ

  Q: Transfer是什么 A: 是一个解决MySQL原生主从同步延迟的方案. Transfer本身是一个在MySQL源码上打的patch,可以用于当Slave,也可以用于当第三方工具,将Master的数据同步发给Slave. 利用多线程实现主从无延迟.   Q: Transfer目前的发布形式? A: 目前的发布形式是可执行的mysqld文件. 最后更新日期 2013-12-01 Transfer.2.3 下载地址    Q: Transfer模式下,主库执行grant 语句会导致同步停

MySQL主从复制的延迟监测

主从复制延迟的监测,我以前的做法是通过比较show slave status\G中的两个变量的差值(Read_Master_Log_Pos,Exec_Master_Log_Pos),将差值设置为一个自己认为合理的范围,Seconds_Behind_Master 没有适用过,今天做一次解析: Seconds_Behind_Master 是通过比较 SQL THREAD 接受 events事件的时间戳(timestamp) 与IO THREAD  执行事件 events时间戳的差值--秒数来确定sl

MySQL主从数据库同步延迟问题解决

MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器. 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案.但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题.这种问题如何解决呢? 1. MySQL数据库主从同步延迟原理. 2. MySQL数据库主从同步延迟是怎么产生的. 3. MySQL数据库主从同步延

MYSQL主从不同步延迟原理分析及解决方案_Mysql

1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施.DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争

使用pt工具检测MySQL主从延迟(r12笔记第7天)

 今天翻看了下<高性能MySQL>,真是让人拍手称绝,里面的很多实战思路非常不错,各种问题分析如数家珍,如果是有一定基础的同学,看起来会非常不错.    当然里面提到的一个地方,感觉很有意思,那就是主从延迟的一个测算思路.书中他们是通过建立一张表,插入时间相关的数据,值得一提的是这个表的存储引擎是Federated,主要就是为了完成类似Oracle DB link一样的特殊需求,在备库端来对比这个时间差来得到一个相对精准的延迟值.    当然有的同学可能会说,我们有show slave sta

MySQL 主从延迟监控脚本(pt-heartbeat)

    对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现.pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟.本文主要是通过脚本来定期检查从库与主库复制的延迟度并发送邮件,供大家参考.     有关pt-heartbeat工具的安装可以参考:percona-toolkit的安装及简介    有关pt-heartbeat工具的介绍可以参考:使用pt-heartbea

一种MySQL主从同步加速方案

一.问题起源 MySQL的主从同步一直有从库延迟的问题,背景资料网上很多,原因简单描述如下: 1. MySQL从库上有一个IO线程负责从主库取binlog到写到本地.另外有一个SQL线程负责执行这些本地日志,实现命令重放: 2. 正常网络状况下IO线程没有性能问题(这个待会会用到),问题是SQL线程只有一个,更新速度跟不上.所以经常会看到从库的CPU idle很高,但同步性能就是上不去. 二.方案雏形 单线程的SQL线程是造成这个问题的主要原因.比较直接的想法是把它改成多线程版本,这个据说官方版

mysql主从常见异常问题解决

  1.问题一:主从复制,中继日志不断增长,如何设置中继日志自动清除 vi 配置文件my.cnf,在mysqld下增添 relay_log_purge=1 (自动清除中继日志打开) 重启mysql,这样SQL Thread每执行完一个events时才会判断该relay-log是否需要,已经不再需要则自动删除 2.问题二:主从同步失败,如何快速同步? 跳过错误,继续同步.设置SQL_slave_skip_counter=1;来快速恢复主从架构,但是此时主从架构的数据可能已经不一致了.set glo