利用binlog2sql快速闪回误删除数据 - 别拿豆包不当干粮

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 今儿给大家分享一篇利用binlog2sql闪回工具,来恢复误删除的数据。我们都知道binlog的作用是备份恢复和完成MySQL的主从复制功能。利用mysqlbinlog工具可以进行基于时间点或者位置偏移量的数据恢复工作,在生产环境中遇到误删除,改错数据的情况,那是常有的事儿。

今儿给大家分享一篇利用binlog2sql闪回工具,来恢复误删除的数据。我们都知道binlog的作用是备份恢复和完成MySQL的主从复制功能。利用mysqlbinlog工具可以进行基于时间点或者位置偏移量的数据恢复工作,在生产环境中遇到误删除,改错数据的情况,那是常有的事儿。我们都知道Oracle数据库有闪回功能,而MySQL本身没有自带闪回,但我们可以使用binlog2sql来完成这项工作。

我们都知道binlog是以event作为单位,来记录数据库变更的数据信息,闪回就是可以帮助我们重现这些变化数据信息之前的操作。也就是说对于insert操作,会生成delete语句,反之delete操作,会生成insert语句。对于update操作,也会生成相反的update语句。这款工具只能使用在binlog格式为row模式下。
下面进行实战演练:
binlog2sql工具的下载地址:link
第一步:环境准备安装各种依赖的工具包列表

python-pip 
PyMySQL 
python-mysql-replication
wheel argparse

第二步:解压binlog2sql软件,命令如下:

unzip  binlog2sql-master.zip
cd binlog2sql-master
pip install –r requirements.txt

第三步:通过python binlog2sql.py --help命令,来查看重要参数的使用

-B, --flashback 生成回滚语句
--start-file 需要解析的binlog文件
--start-position 解析binlog的起始位置
--stop-position解析binlog的结束位置
--start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime
--stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime
-d, --databases 只输出目标db的sql
-t, --tables 只输出目标tables的sql

第四步:开始模拟数据删除
首先删除掉zs库下,t表中的数据

root@db 14:26:  [zs]> select * from t;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | aaa  | bj      |
|  2 | bbb  | sh      |
|  3 | ccc  | gz      |
|  4 | ddd  | sy      |
|  5 | eee  | fj      |
+----+------+---------+
5 rows in set (0.00 sec)

root@db 14:26:  [zs]> delete from t;
Query OK, 5 rows affected (0.04 sec)

root@db 14:27:  [zs]> select * from t;
Empty set (0.00 sec)

第五步:需要创建一个闪回用户

create user 'zs_test'@'%' identified by '123456';
grant select,replication slave,replication client on *.* to 'zs_test'@'%' ;
flush privileges;

第六步:确定当前binlog文件和position位置

root@db 14:41:  [zs]> show master status;
+---------------------+----------+--------------+------------------+------------------------------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+---------------------+----------+--------------+------------------+------------------------------------------+
| mysql-binlog.000002 |     2091 |              |                  | e10f0ead-d595-11e7-82cb-080027cd683a:1-8 |
+---------------------+----------+--------------+------------------+------------------------------------------+

可以看到当前binlog是:mysql-binlog.000002
位置偏移量:2091
第七步:需要预估下时间,误操作的时间范围应该在下午2点20分到2点30分之间。命令如下:

python binlog2sql.py -h192.168.56.102 -P3306 -uzs_test -p123456 -dzs -tt --start-file='mysql-binlog.000002' --start-datetime='2017-11-30 14:20:00' --stop-datetime='2017-11-30 14:30:00'

输出结果:
DELETE FROM zs.t WHERE address='bj' AND id=1 AND name='aaa' LIMIT 1; #start 1214 end 1427 time 2017-11-30 14:27:46
DELETE FROM zs.t WHERE address='sh' AND id=2 AND name='bbb' LIMIT 1; #start 1214 end 1427 time 2017-11-30 14:27:46
DELETE FROM zs.t WHERE address='gz' AND id=3 AND name='ccc' LIMIT 1; #start 1214 end 1427 time 2017-11-30 14:27:46
DELETE FROM zs.t WHERE address='sy' AND id=4 AND name='ddd' LIMIT 1; #start 1214 end 1427 time 2017-11-30 14:27:46
DELETE FROM zs.t WHERE address='fj' AND id=5 AND name='eee' LIMIT 1; #start 1214 end 1427 time 2017-11-30 14:27:46

从解析结果中我们了解到,误操作sql的位置是在1214~1427之间;这样就可以进一步过滤,使用flashback模式生成回滚sql;
命令如下:

python binlog2sql.py -h192.168.56.102 -P3306 -uzs_test -p123456 -dzs -tt --start-file='mysql-binlog.000002' --start-position=1214 --stop-position=1427 -B >t_rollback.sql

查看闪回导出文件:

[root@node3 binlog2sql]# cat t_rollback.sql
INSERT INTO zs.t(address, id, name) VALUES ('fj', 5, 'eee'); #start 1214 end 1427 time 2017-11-30 14:27:46
INSERT INTO zs.t(address, id, name) VALUES ('sy', 4, 'ddd'); #start 1214 end 1427 time 2017-11-30 14:27:46
INSERT INTO zs.t(address, id, name) VALUES ('gz', 3, 'ccc'); #start 1214 end 1427 time 2017-11-30 14:27:46
INSERT INTO zs.t(address, id, name) VALUES ('sh', 2, 'bbb'); #start 1214 end 1427 time 2017-11-30 14:27:46
INSERT INTO zs.t(address, id, name) VALUES ('bj', 1, 'aaa'); #start 1214 end 1427 time 2017-11-30 14:27:46
第八步:应用回滚文件,恢复数据。命令如下:

/usr/local/mysql/bin/mysql -uroot -proot123 zs < t_rollback.sql

第九步:检验恢复数据是否成功

root@db 15:09:  [zs]> select * from t;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | aaa  | bj      |
|  2 | bbb  | sh      |
|  3 | ccc  | gz      |
|  4 | ddd  | sy      |
|  5 | eee  | fj      |
+----+------+---------+
5 rows in set (0.00 sec)

验证恢复数据成功!
工具虽小,但功能很强大,我们要善于发现周围的资源,利用这些武器,来帮助我们学习MySQL数据库!希望甦哥可以帮助到大家!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 MySQL
如何使用MySQL Binlog Digger 4.14对binlog日志进行挖掘分析以便快速恢复误删除数据
MySQL Binlog Digger是一款运行在windows操作系统的挖掘与分析MySQL binlog的可视化工具,通过它可以快速打回被误操作时的数据,例如:delete, insert, update操作,并依据这些误操作生成相应的undo回滚语句,以便快速恢复数据,此外,它还可以支持离线binlog挖掘分析与binlog下载,它仅支持dml操作的回滚,但不支持ddl的回滚。
3775 1
如何使用MySQL Binlog Digger 4.14对binlog日志进行挖掘分析以便快速恢复误删除数据
|
3月前
|
关系型数据库 MySQL 数据库
MySQL回滚工具:binlog 闪回工具 MyFlash工具
MySQL回滚工具:binlog 闪回工具 MyFlash工具
|
SQL 存储 安全
MySQL binlog:格式、增量恢复、闪回、Java 解析
MySQL binlog:格式、增量恢复、闪回、Java 解析
864 0
|
SQL 关系型数据库 MySQL
Mysql误删,恢复数据,binlog闪回,宝塔面板
binlog是二进制日志文件,用来记录Mysql内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。 当我们搭建mysql主从复制的时候,两个实例之间也是通过binlog来完成数据的备份同步。 所以有这种根据binlog得到执行sql语句、闪回sql语句,我们只需要利用根据分析binlog,然后就可以找到准确的数据改动sql,并得到闪回sql,检查无误后执行就可以恢复数据了
776 0
Mysql误删,恢复数据,binlog闪回,宝塔面板
|
SQL 关系型数据库 MySQL
❤️binlog2sql恢复神器解读,快速恢复Mysql误删除数据❤️
❤️binlog2sql恢复神器解读,快速恢复Mysql误删除数据❤️
404 0
|
SQL 监控 Cloud Native
PolarDB-X 1.0-用户指南-数据恢复表-SQL闪回
背景介绍 PolarDB-X SQL闪回针对SQL误操作,提供行级数据的恢复能力。 当您在PolarDB-X上执行误操作SQL(如INSERT、UPDATE或DELETE) 后,使用SQL闪回,提供相关的误操作SQL信息,即可从BINLOG中找到匹配的事件,生成对应的恢复文件,下载后根据需求恢复数据。 SQL闪回针对误操作SQL,支持模糊匹配与精确匹配两种丢失数据的定位策略,以及自动选择匹配策略的能力,请参见名词解释。 面向不同的使用场景,SQL闪回提供回滚SQL与原始SQL两种方式来恢复数据。
244 0
PolarDB-X 1.0-用户指南-数据恢复表-SQL闪回