背景
MySQL同步在快速的网络中是毫秒级的,如果有误操作,从库也很快变更了,对于一些频繁进行,不是经过严格测试的操作或者某些误操作,可能带来风险。而延时备份就可以解决这个问题,他会使从库落后主库一段时间,如果主库有误操作,完全有时间从从库恢复到误操作之前的状态。
从 MySQL 5.6开始支持延时备份,增加了新参数MASTER_DELAY:
change master to master_delay = N;
N为从库延迟主库的秒数,默认是0。如果想要从库延迟一小时,则可:
点击(此处)折叠或打开
stop slave;
change master to master_delay = 3600;
start slave;一小时后从库才会开始同步数据。percona-toolkit工具集中pt-slave-delay延时备份工具。
实现原理
pt-slave-delay工具通过启动和停止复制sql线程来设置从库落后与主库的时间。默认是基于从库上relay日志的binlog的位置来判断,因此不需要连接到主库,如果IO进程不落后与主库太多的话这个方式有效 ,如果IO线程延时过大,pt-slave-delay也可以连接到主库来获取binlog的位置信息。pt-slave-delay一般是通过 --delay参数和--interval参数来控制。--delay参数控制延时时间,--interval参数控制是否启动或者停止从库上sql线程的频繁程度,默认是一分钟检查一次。如果正在运行这个工具,Ctrl+C后他是友好退出,在退出前他还启动复制sql线程。
pt-slave-delay参数用法介绍
常用参数:
--config=A 以逗号分隔的配置文件,如果使用在第一个参数位置
--contiune 继续复制,正常退出(默认是yes)如果退出后重启线程没有until条件,他会正常运行追上master
--delay=m 从库延迟主库时长(默认是一小时)可选参数s=seconds,m=minutes,h=hours,d=days;如果没有参数默认是s
--help 查看帮助文档
--host 连接主机host
--interval 当需要启动或者停止slave时候对接检查一次(默认一分钟)可选参数s=seconds,m=minutes,h=hours,d=days
--log 打印所有输出到指定文件
--password 连接时所需密码
--port 端口号
--quite 静默模式,不打印输出到屏幕上
--run-time pt-slave-delay运行时长
--socket socket文件路径
--user 连接用户名
--version 显示版本号
帮助文档:
man /usr/bin/pt-slave-delay
pt-slave-delay --help
使用范例
使用范例:
使从库延后主库1小时,并且隔十分钟检查一次,运行10小时
pt-slave-delay --user=root --passsword=********* --port=**** --host=*.*.*.* --delay=1h --interval=10m --run-time=10h
延时备份监控
监控用到两个脚本,一个脚本负责启动延时备份,另一个脚本负责监控延时备份的进程和从库的延时时间,如果检测到没有启动或者延时超时,即发出报警。这个监控脚本添加到定时任务cron中。启动时需要三个参数:host、port、delaytime,使用这些参数增大了监控脚本的使用范围并且可批量执行延时备份。
脚本一:
这个脚本负责启动延时备份,默认传入三个参数:host 、port、delaytime。delaytime默认使用“h”。
脚本二:
这个脚本添加到定时任务cron中,传入启动脚本中的三个默认参数:host、port、delaytime。监控两个状态
(1)pt-slave-delay进程是否在正常执行,如果检测不到pt-slave-delay进程则报警。
(2)对比从库监控表的 onlinetime 和主库时间戳,看是否时差超过延时时长delaytime,如果超出delaytime 则报警。