• mysql误删误操作恢复数据,比传统方式和binlog2sql更快速用的恢复方式-reverse_sql恢复数据(单表多表)


    场景: 误操作删除了某个表的数据,本文只讲工具的使用,首先自己通过mysqlbinlog或者记录找到误操作的时间范围:开始时间和结束时间,已经确定好是哪个binlog了下面以误删为例。

     查看binlog是否开启

    show variables like ‘%log_bin%’;

    查看binlog的存放目录

    show variables like ‘%datadir%’;

    查看binlog日志文件列表,也可以进去目录路面看

    show master logs ;

    查看目前最后一个binlog日志

    show master status;

    刷新日志

    flush logs;

    查看是否刷新成功

    show master logs ;

    准备:下载reverse_sql 工具

    https://github.com/hcymysql/reverse_sql/

    1. 

    将下载的:reverse_sql 传到服务器上随便哪个目录(不上传也行只要本地能跑,我一般喜欢放在  bin下)

    2. 通过reverse_sql 如下命令:delete 为例(其他误操作 update 、insert 等误操作需要-op 的值不一样,可以看 ./reverse_sql -h 参数说明)

     ./reverse_sql -ot tables -op delete -H localhost -P 3306 -u root -p xxxx -d dbnames --binlog-file binlog.000050 --start-time "2023-10-12 9:00:00" --end-time "2023-10-12 10:51:00"

    参数使用说明可以

    ./reverse_sql -h

    root@93b34c5d3fa2:/usr/bin# ./reverse_sql -h
    usage: reverse_sql [-h] [-ot ONLY_TABLES [ONLY_TABLES ...]] [-op ONLY_OPERATION] -H MYSQL_HOST -P MYSQL_PORT -u
                       MYSQL_USER -p MYSQL_PASSWD -d MYSQL_DATABASE [-c MYSQL_CHARSET] --binlog-file BINLOG_FILE
                       [--binlog-pos BINLOG_POS] --start-time ST --end-time ET [--max-workers MAX_WORKERS] [--print]
                       [--replace]

    Binlog数据恢复,生成反向SQL语句。

    options:
      -h, --help            show this help message and exit
      -ot ONLY_TABLES [ONLY_TABLES ...], --only-tables ONLY_TABLES [ONLY_TABLES ...]
                            设置要恢复的表,多张表用,逗号分隔
      -op ONLY_OPERATION, --only-operation ONLY_OPERATION
                            设置误操作时的命令(insert/update/delete)
      -H MYSQL_HOST, --mysql-host MYSQL_HOST
                            MySQL主机名
      -P MYSQL_PORT, --mysql-port MYSQL_PORT
                            MySQL端口号
      -u MYSQL_USER, --mysql-user MYSQL_USER
                            MySQL用户名
      -p MYSQL_PASSWD, --mysql-passwd MYSQL_PASSWD
                            MySQL密码
      -d MYSQL_DATABASE, --mysql-database MYSQL_DATABASE
                            MySQL数据库名
      -c MYSQL_CHARSET, --mysql-charset MYSQL_CHARSET
                            MySQL字符集,默认utf8
      --binlog-file BINLOG_FILE
                            Binlog文件
      --binlog-pos BINLOG_POS
                            Binlog位置,默认4
      --start-time ST       起始时间
      --end-time ET         结束时间
      --max-workers MAX_WORKERS
                            线程数,默认4(并发越高,锁的开销就越大,适当调整并发数)
      --print               将解析后的SQL输出到终端
      --replace             将update转换为replace操作

    Example usage:
        shell> ./reverse_sql -ot table1 -op delete -H 192.168.198.239 -P 3336 -u admin -p hechunyang -d hcy \
                --binlog-file mysql-bin.000124 --start-time "2023-07-06 10:00:00" --end-time "2023-07-06 22:00:00"

    3.执行好了后会生成

    打开如下图的txt文件内容,有操作时间点 、操作的原生sql、及根据原生sql生成的回滚sql

    提取并过滤出真正需要回滚sql 执行 就能恢复了。

  • 相关阅读:
    空洞卷积学习笔记
    麒麟v10安装mysql(ARM架构)
    附文献!艾美捷抗人IL-12/-23(p40)mAbs MT86/221研究
    《面试八股文》之Zookeeper12卷
    web前端开发技术纯静态 (12306官网 1页)
    设计模式之代理模式-@Async异步注解失效
    搭建MyCat2一主一从的MySQL读写分离
    MySQL常用配置详解
    NTLM与kerberos认证体系详解
    Spark repartitionAndSortWithinPartitions
  • 原文地址:https://blog.csdn.net/boomLJiE/article/details/133787163