暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

binlog2sql闪回工具-通过binlog实现MySQL误操作数据恢复

原创 金同学 2023-05-22
591

作者danfengcao,大众点评DBA团队。它是一款开源的MySQL binlog解析工具,通过伪装slave拉取binlog进行处理。我们使用该工具可以得到原始SQL、回滚SQL、去除主键的insert SQL等。

项目地址: https://github.com/danfengcao/binlog2sql

数据库配置要求

[mysqld]
binlog_format=row
binlog_row_image=full
binlog_transaction_compression=OFF

限制

  • 使用回滚/闪回功能时,binlog_format=row,且binlog_row_image=full;
  • 关闭binlog压缩功能,即binlog_transaction_compression=OFF;(否则无法获取到SQL语句)
  • binlog2sql只能回滚DML,不能回滚DDL;
  • 创建binlog2sql访问的mysql用户时,必须指定密码插件为mysql_native_password;
  • mysql连接用户需要select, replication slave, replication client权限;

下载安装binlog2sql

安装python3.6.8

#编译安装python3.6.8
tar -xvJf Python-3.6.8.tar.xz -C /data/soft/
cd /data/soft/Python-3.6.8 
./configure prefix=/usr/local/python3

make && make install 
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3 
ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3 

部署binlog2sql

#下载binlog2sql
git clone https://github.com/danfengcao/binlog2sql.git
[root@test binlog2sql]# pwd
/root/binlog2sql
[root@test binlog2sql]# ls
binlog2sql  example  LICENSE  README.md  requirements.txt  tests

#编辑requirements.txt文件。如果是mysql8.0,需将PyMySQL==0.7.11修改为PyMySQL==0.9.3
[root@test binlog2sql]# vi requirements.txt
PyMySQL==0.9.3
wheel==0.29.0
mysql-replication==0.13
#安装python3依赖模块
pip3 install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com requirements.txt

binlog2sql参数介绍

# 解析模式
--stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。
--no-primary-key,-K  对INSERT语句去除主键。可选。默认False
--flashback,-B  生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。

# 解析范围控制
--start-file 起始解析文件,只需文件名,无需全路径 。必须。
--start-position/--start-pos 起始解析位置。可选。默认为start-file的起始位置。
--stop-file/--end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
--stop-position/--end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
--start-datetime 起始解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。
--stop-datetime 终止解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。

# 对象过滤
--databases,-d 只解析目标db的sql,多个库用空格隔开,如-d db1 db2。可选。默认为空。
--tables,-t 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。
--only-dml 只解析dml,忽略ddl。可选。默认False。
--sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。

解析binlog文件

获取原标准SQL

python3 binlog2sql-master/binlog2sql/binlog2sql.py -hxxx -P3306 -uroot -p'xxx' -ddbtest -tscott --start-file='mysql-bin.000001' --start-datetime='2023-05-11 14:12:52' --stop-datetime='2023-05-11 14:47:00' > /tmp/a.sql

生产回滚SQL

python3 binlog2sql-master/binlog2sql/binlog2sql.py -hxxx -P3306 -uroot -p'xxx' -ddbtest -tscott --start-file='mysql-bin.000001' --start-datetime='2023-05-11 14:12:52' --stop-datetime='2023-05-11 14:47:00' -B > /tmp/a.sql










最后修改时间:2023-05-22 20:32:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论