您的当前位置:首页正文

mysqlreplication主从间如何延迟

2020-11-09 来源:独旅网

猛然间听到这样的问题,还是很惊讶的,因为我们讨论最多的是如何避免replication复制延迟,特别是在读写分离的环境下,主库或从库压力大的情况下,master写入的数据很难快速到slave,如这样的架构一主多从 ,特别是现在一些电子商务类的网上商城。所以听到要

猛然间听到这样的问题,还是很惊讶的,因为我们讨论最多的是如何避免replication复制延迟,特别是在读写分离的环境下,主库或从库压力大的情况下,master写入的数据很难快速到slave,如这样的架构一主多从 ,特别是现在一些电子商务类的网上商城。所以听到要replication间人为延迟 如一个小时或两个小时这样的需求,很是惊讶。

目前mysql 还没有实现这样的功能,google了一把,目前说是mysql 5.6已经有了这功能,而且也有第三方工具来实现,详细的可以查看这哥们的博客 :

http://www.db110.com/?p=3871 上面介绍的比较详细,我摘抄如下:

pt-slave-delay

mysql同步在快速的网络中是毫秒级的,如果有误操作,从库也很快变更了,对于一些频繁进行,不是经过严格测试的升级,可能带来风险.

可考虑配置一个延迟复制的副本,以改善故障情况下的可恢复性.

mysql 5.6版本已经支持延迟复制,如果5.1版本,可以用percona工具出品的一个工具pt-slave-delay

pt-slave-delay – Make a MySQL slave server lag behind its master.

下载: wget percona.com/get/pt-slave-delay

安装: 略

语法: pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]

选项值一般可以用默认的. 默认是延迟1小时.

如: pt-slave-delay –delay 1m –interval 15s –run-time 10m slavehost

运行这个工具10分钟(默认是永久运行的) . 从库保持一直滞后主库1分钟,每次检查间隔15秒,那么理论上是延迟1分钟15秒.

这个工具是低风险的.

它的原理是: 检查主库的日志到了哪里了(可以用show slave status 命令查看relay日志) , 对比已经应用的日志, 就知道延迟的时间了.

每隔1分钟检查(默认),不断启动,关闭 replication SQL thread 来保持主从一直延时固定的时间.


如果正在运行这个工具,那么 Ctrl-C 退出后,它是友好的退出的,意即他会启动复制sql线程.

生产环境示例:

./pt-slave-delay u=xxxx,S=/tmp/mysql.sock,p=d1\\ccc(\* –log /home/mysql/scripts/log/delay.log –daemonize

当时第一反应是目前mysql 无法实现,后来想了想,只能认为的写程序去控制,比对两个库日志读的是否一致,写脚本来控制了,大概就这样的思路。

显示全文