Chinaunix首页 | 论坛 | 博客
  • 博客访问: 627387
  • 博文数量: 104
  • 博客积分: 1968
  • 博客等级: 上尉
  • 技术积分: 1587
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:52
文章分类

全部博文(104)

文章存档

2013年(12)

2012年(50)

2011年(42)

分类: Mysql/postgreSQL

2013-03-18 15:04:57

背景

MySQL同步在快速的网络中是毫秒级的,如果有误操作,从库也很快变更了,对于一些频繁进行,不是经过严格测试的操作或者某些误操作,可能带来风险。而延时备份就可以解决这个问题,他会使从库落后主库一段时间,如果主库有误操作,完全有时间从从库恢复到误操作之前的状态。

从 MySQL 5.6开始支持延时备份,增加了新参数MASTER_DELAY:
change master to master_delay = N;
N为从库延迟主库的秒数,默认是0。如果想要从库延迟一小时,则可:

点击(此处)折叠或打开

  1. stop slave;
  2. change master to master_delay = 3600;
  3. start slave;


一小时后从库才会开始同步数据。

这个是官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html



这里介绍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 则报警。



阅读(5549) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~