reverse_sql —— MySQL 数据闪回恢复工具
reverse_sql 是一个用于解析和转换 MySQL 二进制日志(binlog)的工具。它可以将二进制日志文件中记录的数据库更改操作(如插入、更新、删除)转换为反向的 SQL 语句,以便进行数据恢复。其运行模式需二进制日志设置为 ROW 格式。
该工具的主要功能和特点包括:
1、解析二进制日志:reverse_sql 能够解析 MySQL 的二进制日志文件,并还原出其中的 SQL 语句。
2、生成可读的 SQL:生成原始 SQL 和反向 SQL。
3、支持过滤和筛选:可以根据时间范围、表、DML操作等条件来过滤出具体的误操作 SQL 语句。
4、支持多线程并发解析binlog事件。
使用
shell> chmod 755 reverse_sql shell> ./reverse_sql --help 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] 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"
工具运行时,首先会进行MySQL的环境检测(if binlog_format != 'ROW' and binlog_row_image != 'FULL'),如果不同时满足这两个条件,程序直接退出。
工具运行后,会在当前目录下生成一个{db}_{table}_recover.sql文件,保存着原生SQL(原生SQL会加注释) 和 反向SQL,如果想将结果输出到前台终端,可以指定--print选项。
如果你想把update操作转换为replace,指定--replace选项即可,同时会在当前目录下生成一个{db}_{table}_recover_replace.sql文件。
MySQL 最小化用户权限:
> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `yourname`@`%`; > GRANT SELECT ON `test`.* TO `yourname`@`%`;
恢复
在{db}_{table}_recover.sql文件中找到你刚才误操作的DML语句,然后在MySQL数据库中执行逆向工程后的 SQL 以恢复数据。
如果{db}_{table}_recover.sql文件的内容过多,也可以通过awk命令进行分割,以便更容易进行排查。
shell> awk '/^-- SQL执行时间/{filename = "output" ++count ".sql"; print > filename; next} {print > filename}' test_t1_recover.sql
不支持drop和truncate操作,因为这两个操作属于物理性删除,需要通过历史备份进行恢复。
注:reverse_sql 支持MySQL 5.7/8.0 和 MariaDB,适用于CentOS 7系统。
Docker部署使用
shell> wget https://github.com/hcymysql/reverse_sql/archive/refs/heads/reverse_sql_progress.zip
shell> unzip reverse_sql_progress.zip
shell> cd reverse_sql_progress
shell> vim Dockerfile
FROM centos:7 COPY reverse_sql /root/ RUN chmod 755 /root/reverse_sql
shell> docker build -t reverse_sql .
shell> docker run -itd --name reverse_sql reverse_sql /bin/bash
shell> docker exec -it reverse_sql /root/reverse_sql --help

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | Android 发热监控实践
一、背景 相信移动端高度普及的现在,大家或多或少都会存在电量焦虑,拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在,且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位发热现场、以及归因发热问题成为了端侧应用层发热监控的面前的三座大山。本文通过得物 Android 端侧现有的一些监控实践,不深入功耗计算场景无法自拔,优先聚焦于发热场景本身,希望能给大家一些参考。 二、发热定义 温度是最直观能反映发热问题的指标,当前 Android 侧,我们以体感温度 37° 以上作为分界线,向上每 3° 作为一个发热温度区间,区间细分上限温度 49° ,即划分出 37-40,40-43,43-46,46-49,49+ 五个等级。 以手机温度、CPU 使用率作为第一、第二要素来判断用户是否发热的同时,获取其他参数来支撑发热现场情况。 具体指标如下: 手机温度 CPU 使用率、GPU 使用率; 线程堆栈; 系统服务使用频次; 设备前后台、亮灭屏时长; 电量、充电情况; 热缓解发热等级; 系统机型、版本; .... 三、指标获取 温度 电池温度...
- 下一篇
微软计划为 Windows 10 提供 AI 助手 Copilot
根据 Windows Central 的报道,微软计划将 Copilot 引入 Windows 10。该公司做出这一决定的主要原因是希望为 Copilot 增加更多用户。 Windows 11 最近发布的重大更新 v23H2 包含了 AI 助手 Copilot,它直接添加到了桌面的工具栏上。但 Windows 11 的用户数目前还远不及上一代的 Windows 10,而微软致力于让每个用户都能使用 Copilot,它正计划向有 10 亿用户的 Windows 10 提供 Copilot。 Windows 10 的 Copilot 和 Windows 11 基本一致,Copilot 按钮放置在工具栏上,点击该按钮会显示一个可用于对话的侧边栏。 报道还指出,Windows 10 和 Windows 11 的 Copilot 体验将是相同的,包括插件的兼容性。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker安装Oracle12C,快速搭建Oracle学习环境