跨境电商一站式服务平台,适合做视频的自媒体平台,美食网站php源码,一个公司可以做多少个网站概述Binlog2sql是一个Python开发开源的MySQL Binlog解析工具#xff0c;能够将Binlog解析为原始的SQL#xff0c;也支持将Binlog解析为回滚的SQL#xff0c;去除主键的INSERT SQL#xff0c;是DBA和运维人员数据恢复好帮手。一、安装配置1.1 用途数据快速回滚(闪回)主从切换…概述Binlog2sql是一个Python开发开源的MySQL Binlog解析工具能够将Binlog解析为原始的SQL也支持将Binlog解析为回滚的SQL去除主键的INSERT SQL是DBA和运维人员数据恢复好帮手。一、安装配置1.1 用途数据快速回滚(闪回)主从切换后新master丢数据的修复从binlog生成标准SQL带来的衍生功能支持MySQL5.65.71.2 安装shell git clone https://github.com/danfengcao/binlog2sql.git cd binlog2sqlshell pip install -r requirements.txt二、使用方法2.1 使用前配置2.1.1参数配置[mysqld]server_id 1log_bin /var/log/mysql/mysql-bin.logmax_binlog_size 1Gbinlog_format rowbinlog_row_image full2.1.2 user需要的最小权限集合select, super/replication client, replication slave建议授权select, super/replication client, replication slave权限说明select需要读取server端information_schema.COLUMNS表获取表结构的元信息拼接成可视化的sql语句super/replication client两个权限都可以需要执行SHOW MASTER STATUS, 获取server端的binlog列表replication slave通过BINLOG_DUMP协议获取binlog内容的权限2.2 基本用法2.2.1基本用法解析出标准SQLshell python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -padmin -dtest -t test3 test4 --start-filemysql-bin.000002输出INSERT INTO test.test3(addtime, data, id) VALUES (2016-12-10 13:03:38, english, 4); #start 570 end 736UPDATE test.test3 SET addtime2016-12-10 12:00:00, data中文, id3 WHERE addtime2016-12-10 13:03:22 AND data中文 AND id3 LIMIT 1; #start 763 end 954DELETE FROM test.test3 WHERE addtime2016-12-10 13:03:38 AND dataenglish AND id4 LIMIT 1; #start 981 end 1147解析出回滚SQLshell python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -padmin -dtest -ttest3 --start-filemysql-bin.000002 --start-position763 --stop-position1147输出INSERT INTO test.test3(addtime, data, id) VALUES (2016-12-10 13:03:38, english, 4); #start 981 end 1147UPDATE test.test3 SET addtime2016-12-10 13:03:22, data中文, id3 WHERE addtime2016-12-10 12:00:00 AND data中文 AND id3 LIMIT 1; #start 763 end 9542.2.2 选项mysql连接配置-h host; -P port; -u user; -p password解析模式--stop-never 持续解析binlog。可选。默认False同步至执行命令时最新的binlog位置。-K, --no-primary-key 对INSERT语句去除主键。可选。默认False-B, --flashback 生成回滚SQL可解析大文件不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。--back-interval -B模式下每打印一千行回滚SQL加一句SLEEP多少秒如不想加SLEEP请设为0。可选。默认1.0。解析范围控制--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。可选。默认不过滤。对象过滤-d, --databases 只解析目标db的sql多个库用空格隔开如-d db1 db2。可选。默认为空。-t, --tables 只解析目标table的sql多张表用空格隔开如-t tbl1 tbl2。可选。默认为空。--only-dml 只解析dml忽略ddl。可选。默认False。--sql-type 只解析指定类型支持INSERT, UPDATE, DELETE。多个类型用空格隔开如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型则三者都不解析。2.3 应用案例2.3.1 误删整张表数据需要紧急回滚闪回详细介绍可参见example目录下《闪回原理与实战》example/mysql-flashback-priciple-and-practice.mdtest库tbl表原有数据mysql select * from tbl;---------------------------------| id | name | addtime |---------------------------------| 1 | 小赵 | 2016-12-10 00:04:33 || 2 | 小钱 | 2016-12-10 00:04:48 || 3 | 小孙 | 2016-12-13 20:25:00 || 4 | 小李 | 2016-12-12 00:00:00 |---------------------------------4 rows in set (0.00 sec)mysql delete from tbl;Query OK, 4 rows affected (0.00 sec)20:28时tbl表误操作被清空mysql select * from tbl;Empty set (0.00 sec)恢复数据步骤1、登录mysql查看目前的binlog文件mysql show master status;-----------------------------| Log_name | File_size |-----------------------------| mysql-bin.000051 | 967 || mysql-bin.000052 | 965 |-----------------------------2、最新的binlog文件是mysql-bin.000052我们再定位误操作SQL的binlog位置。误操作人只能知道大致的误操作时间我们根据大致时间过滤数据。shell python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -padmin -dtest -ttbl --start-filemysql-bin.000052 --start-datetime2016-12-13 20:25:00 --stop-datetime2016-12-13 20:30:00输出INSERT INTO test.tbl(addtime, id, name) VALUES (2016-12-13 20:26:00, 4, 小李); #start 317 end 487 time 2016-12-13 20:26:26UPDATE test.tbl SET addtime2016-12-12 00:00:00, id4, name小李 WHERE addtime2016-12-13 20:26:00 AND id4 AND name小李 LIMIT 1; #start 514 end 701 time 2016-12-13 20:27:07DELETE FROM test.tbl WHERE addtime2016-12-10 00:04:33 AND id1 AND name小赵 LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM test.tbl WHERE addtime2016-12-10 00:04:48 AND id2 AND name小钱 LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM test.tbl WHERE addtime2016-12-13 20:25:00 AND id3 AND name小孙 LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM test.tbl WHERE addtime2016-12-12 00:00:00 AND id4 AND name小李 LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:053、我们得到了误操作sql的准确位置在728-938之间再根据位置进一步过滤使用flashback模式生成回滚sql检查回滚sql是否正确(注真实环境下此步经常会进一步筛选出需要的sql。结合grep、编辑器等)shell python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -padmin -dtest -ttbl --start-filemysql-bin.000052 --start-position3346 --stop-position3556 -B rollback.sql | cat输出INSERT INTO test.tbl(addtime, id, name) VALUES (2016-12-12 00:00:00, 4, 小李); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO test.tbl(addtime, id, name) VALUES (2016-12-13 20:25:00, 3, 小孙); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO test.tbl(addtime, id, name) VALUES (2016-12-10 00:04:48, 2, 小钱); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO test.tbl(addtime, id, name) VALUES (2016-12-10 00:04:33, 1, 小赵); #start 728 end 938 time 2016-12-13 20:28:054、确认回滚sql正确执行回滚语句。登录mysql确认数据回滚成功。shell mysql -h127.0.0.1 -P3306 -uadmin -padmin rollback.sqlmysql select * from tbl;---------------------------------| id | name | addtime |---------------------------------| 1 | 小赵 | 2016-12-10 00:04:33 || 2 | 小钱 | 2016-12-10 00:04:48 || 3 | 小孙 | 2016-12-13 20:25:00 || 4 | 小李 | 2016-12-12 00:00:00 |---------------------------------三、总结3.1 限制(对比mysqlbinlog)mysql server必须开启离线模式下不能解析参数 binlog_row_image 必须为FULL暂不支持MINIMAL解析速度不如mysqlbinlog3.2 优点(对比mysqlbinlog)纯Python开发安装与使用都很简单自带flashback、no-primary-key解析模式无需再装补丁flashback模式下更适合闪回实战解析为标准SQL方便理解、筛选代码容易改造可以支持更多个性化解析总结以上所述是小编给大家介绍的MySQL数据误删除的快速解决方法,希望对大家有所帮助如果大家有任何疑问请给我留言小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持如果你觉得本文对你有帮助欢迎转载烦请注明出处谢谢