c语言 proteus 延迟2秒_MySQL复制(十四) MySQL延迟复制让你删库不要跑路!

如果因错误操作或程序逻辑错误,造成数据误删除(如drop/truncate table),怎么快速的进行数据恢复呢?

延迟复制

延迟复制[1]能让从库拉取Binlog事件后,延迟SQL线程进行事件的应用,当发现数据错误操作后,可以从Slave快速的进行数据恢复,避免从备份文件中进行恢复,以及应用binlog事件,提高了RTO(Recovery Time Objective)。

使用延迟复制可以解决以下问题:

  • 防止数据操作错误
  • 使用延迟复制模拟Slave延迟,以测试业务的容错情况

在MySQL 5.6之前需要借助pt-slave-delay工具[2]才能实现延迟复制,通过控制SQL线程的启停来实现。5.6开始原生支持延迟复制,使用CHANGE MASTER TO MASTER_DELAY=N; 来设置延迟N秒。

使用show slave status可以查看延迟复制的状态:

  • SQL_Delay,指示延迟多少秒
  • SQL_Remaining_Delay,当SQL线程状态为Waiting until MASTER_DELAY seconds after master executed event时,表示到指定延迟时间还剩多少秒
  • Slave_SQL_Running_State,指示SQL线程的状态

使用mysqld_exporter进行MySQL监控时,指标mysql_slave_status_sql_delay表示设定的延迟时间是多少秒,在监控延迟时可以减掉这个设定值。

8.0

MySQL 8.0在binlog事件的每个事务增加了两个时间戳,用来进行延迟复制的判断:

  • immediate_commit_timestamp,事务提交时,写到级联源的时间戳
  • original_commit_timestamp,事务提交时,写到起始源的时间戳
d99fad0e493a09eb0f46565f6d5b0aff.png

可以使用Performance Schema的相关表来监控复制状态:

  • replication_connection_status,提供连接状态信息
  • replication_applier_status_by_coordinator,提供协调线程的信息
  • replication_applier_status_by_worker,提供worker线程的信息
  • replication_applier_configuration的DESIRED_DELAY表明设定为延迟多少秒

总结

MySQL有了原生的延迟复制支持,就不需要使用额外的工具来搭建延迟复制,使用上延迟复制就可以避免数据误操作的灾难恢复场景了,需要延迟多长时间需要结合业务需求进行评估,但是备份策略还是不能少的咯。

参考资料

[1]

Delayed Replication: https://dev.mysql.com/doc/refman/8.0/en/replication-delayed.html

[2]

pt-slave-delay: https://www.percona.com/doc/percona-toolkit/LATEST/pt-slave-delay.html

10017502c1aafa6ef6c9ff65824e051a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值