MySQL-binlog2sql闪回工具

1.安装

shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql 
shell> yum install python3 -y

vim修改requirements.txt中的PyMySQL==0.9.3

shell> pip3 install -r requirements.txt
数据库中创建用户,密码插件必须为mysql_native_password

2.作用:

快速回滚(闪回)数据。
修复主从切换后数据不一致的问题。
解析 binlog 生成标准 SQL 语句带来的衍生功能。

3.参数:

1. MySQL 连接配置选项
          -h:指定需要连接的数据库P地址。
          -P:指定需要连接的数据库端口。
          -u:指定需要连接的数据库中的用户名。 
          -p:指定-u选项指定的用户的密码。

2. 解析模式选项
          -stop-never: 持续同步binlog。可选。不使用此选项,则同步至执行命令时最新的binlog位置。
          -K,no-primary-key: 对insert语句去除主键.可选。
          -B,--flashback: 生成回滚语句,可解析大文件,不受内存限制,每打印l000行加一句 SLEEP SELECT(1)。可选。与-stop-never或-no-primary-key选项不能同时使用。

3. 解析范围控制选项
          --start-file: 起始解析文件。必选。
          --start-position/--start-pos: 用于指定--start-file选项指定文件的起始解析位置。可选。 如果不指定,则默认将从--start-file选项指定文件的开头进行解析。
          --stop-file-end-file: 末尾解析文件。可选。如果不指定,则将复用--start-file选项指定的文件名。若解析模式为--stop-never,则此选项失效。
          --stop-position/-end-pos: stop-file的末尾解析位置。可选。默认为stop-fle的最末位置。若解析模式为--stop-never,则此选项失效。
          --start-datetime: 从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
          --stop-datetime: 到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-l1-l1 11:11:11'。可选。默认不过滤。
4. 对象过滤选项
          -d, --database 只输出目标数据库的 SQ 语句。可选。默认为空。
          -t, --tables 只输出目标表的 SQL 语句。可选。默认为空。
4.举例:
```powershell
1.解析日志事件SQL: 
shell> python3 binlog2sql.py -h 10.0.0.53 -P3306 -uroot - p123 -d test -t t1 --start-file='mysql-bin.000004'

2.只解析delete类型操作: 
shell> python3 binlog2sql.py -h 10.0.0.51 -P3306 -uroot -p123 -d test -t t1 --start-file='mysql-bin.000003' --sql-type=delete

3.生成指定事件回滚语句: 
shell> python3 binlog2sql.py -h 10.0.0.51 -P3306 -uroot - p123 -d test -t t1 --start-file='mysql-bin.000003' --sql-type=delete --start-position=932 --stop-position=1198 -B 
 
shell> python3 binlog2sql.py -h 10.0.0.51 -P3306 -uroot - p123 -d test -t t1 --start-file='mysql-bin.000003' --sql-type=delete --start-position=932 --stop-position=1198 -B>/tmp/flashback.sql
posted @ 2023-04-19 16:44  Enzo_Ocean  阅读(29)  评论(0编辑  收藏  举报