zoukankan      html  css  js  c++  java
  • MySQL延时复制简介

    公司有一套mysqlAB复制架构的生产库,一主一从的架构, 每周一凌晨0天都自动做全备。

    一切正常,但今天(假设为周6)不小心误删除了一张表,从库也会跟着做误删除。假设这张表里有好几年的业务数据,  如何恢复呢?

    有以下几种思路:

    需要把这几年内所有的二进制日志先合并,再通过sed,grep,awk等命令处理把这张表从建表到现在的所有操  作按顺序找出来(当然要除掉你最后误删除的那条),然后导回去(数据量太大就不建议了)

    先恢复周一的全备到测试库上,然后再恢复全备到现在的二进制日志(除了误删除的那句),再把那张表导出  来,导回到生产库上

    有延时复制的话,在延时库上导出这张表,导回A,  再用二进制日志恢复延时时间内的误删表的操作(除了误删除的那句)

    从上面的分析来看,延时复制能够在一定程序上简化恢复的过程。

    Maatkit是一个Perl写的Mysql开源管理工具包, 里面有一个mk-slave-delay 命令可以实现延时复制。

    可以在www.maatkit.org网站上下载软件包。我这里软包为maatkit-7540.tar.gz

     

    搭建过程

    首先需要搭建好mysqlAB复制(传统AB复制,基于GTIDs的AB复制,半同步复制等都可以),然后做以下过程

    1, 在需要做延时复制的slave上安装mattkit

    (注意: master和正常的slave不用安装)

     

    2, 确认整个架构所有机器时间同步

    因为延时是要按时间来计算的,所以时间必须要一致, 所有服务器执行下面的命令,并比较时间

    3, 运行延时复制进程

    确认时间一致, 并且AB复制正常的情况下, 在slave上执行下面的命令

    4.jpg

    参数

    说明

    --defaults-file=/mysql56/etc/my.cnf

    指定slave的mysql配置文件

    localhost

    指定mysql为localhost本机上

    --quiet

    指定输出信息为静默模式,在终端不会显示很多信息

    --delay=1m

    表示延时一分钟,生产环境根据实际需求来调整

    --interval=15s

    15秒为一个间隔周期,延时时间到了后,SQL线程会执行15秒内的操作

    --user=root

    指定连接数据库的用户

    --password=123

    指定连接数据库的密码

    --socket=/tmp/mysql56.sock

    指定连接数据库的socket文件路径

    4, 测试

    在slave上查看复制状态,会发现SQL线程为NO,这是正常的,因为延时复制里IO线程是实时的,只是把SQL线程延时了

    5.jpg

    然后在master上找一个测试表插入几条数据,等待1分钟后,才会看到数据在salve上复制成功

  • 相关阅读:
    转载高效的MySQL分页 枫
    [笔记]NFC笔记——WUP_REQ 和 WUP_RES 消息结构
    [笔记]NFC笔记——PSL_REQ 和 PSL_RES 消息结构
    [笔记]C语言中二级指针简单例子
    [笔记]NFC协议规范学习笔记汇总
    [笔记]C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
    [笔记]如何限制用户在5分钟之后才能重复同样操作
    [笔记]NFC笔记——ATR_RES 消息结构
    简单的具备自动检测行为的文本框控件
    多重AutoComplete的Textbox
  • 原文地址:https://www.cnblogs.com/ling-yu-amen/p/11268093.html
Copyright © 2011-2022 走看看