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

 

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

我们都知道binlog是以event作为单位,来记录数据库变更的数据信息,闪回就是可以帮助我们重现这些变化数据信息之前的操作。也就是说对于insert操作,会生成delete语句,反之delete操作,会生成insert语句。对于update操作,也会生成相反的update语句。这款工具只能使用在binlog格式为row模式下。

下面进行实战演练:

binlog2sql工具的下载地址: https://github.com/danfengcao/binlog2sql

***步:环境准备安装各种依赖的工具包列表

 

  1. python-pip , 
  2.  
  3. PyMySQL , 
  4.  
  5. python-mysql-replication, 
  6.  
  7. wheel argparse 

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

 

  1. unzip  binlog2sql-master.zip 
  2.  
  3. cd binlog2sql-master 
  4.  
  5. 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表中的数据

 

  1. root@db 14:26:  [zs]> select * from t; 
  2.  
  3. +----+------+---------+ 
  4.  
  5. | id | name | address | 
  6.  
  7. +----+------+---------+ 
  8.  
  9. |  1 | aaa  | bj      | 
  10.  
  11. |  2 | bbb  | sh      | 
  12.  
  13. |  3 | ccc  | gz      | 
  14.  
  15. |  4 | ddd  | sy      | 
  16.  
  17. |  5 | eee  | fj      | 
  18.  
  19. +----+------+---------+ 
  20.  
  21. rows in set (0.00 sec)  
  22.  
  23.  
  24. root@db 14:26:  [zs]> delete from t; 
  25.  
  26. Query OK, 5 rows affected (0.04 sec)  
  27.  
  28.  
  29. root@db 14:27:  [zs]> select * from t; 
  30.  
  31. Empty set (0.00 sec) 

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

 

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

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

 

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

可以看到当前binlog是:mysql-binlog.000002

位置偏移量:2091

第七步:需要预估下时间,误操作的时间范围应该在下午2点20分到2点30分之间。命令如下:

 

  1. 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' 

输出结果:

 

  1. 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 
  2.  
  3. 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 
  4.  
  5. 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 
  6.  
  7. 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 
  8.  
  9. 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;

命令如下:

 

  1. 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 

查看闪回导出文件:

 

  1. [root@node3 binlog2sql]# cat t_rollback.sql  
  2.  
  3. INSERT INTO `zs`.`t`(`address`, `id`, `name`) VALUES ('fj', 5, 'eee'); #start 1214 end 1427 time 2017-11-30 14:27:46 
  4.  
  5. INSERT INTO `zs`.`t`(`address`, `id`, `name`) VALUES ('sy', 4, 'ddd'); #start 1214 end 1427 time 2017-11-30 14:27:46 
  6.  
  7. INSERT INTO `zs`.`t`(`address`, `id`, `name`) VALUES ('gz', 3, 'ccc'); #start 1214 end 1427 time 2017-11-30 14:27:46 
  8.  
  9. INSERT INTO `zs`.`t`(`address`, `id`, `name`) VALUES ('sh', 2, 'bbb'); #start 1214 end 1427 time 2017-11-30 14:27:46 
  10.  
  11. INSERT INTO `zs`.`t`(`address`, `id`, `name`) VALUES ('bj', 1, 'aaa'); #start 1214 end 1427 time 2017-11-30 14:27:46 

第八步:应用回滚文件,恢复数据。命令如下:

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

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

 

  1. root@db 15:09:  [zs]> select * from t; 
  2.  
  3. +----+------+---------+ 
  4.  
  5. | id | name | address | 
  6.  
  7. +----+------+---------+ 
  8.  
  9. |  1 | aaa  | bj      | 
  10.  
  11. |  2 | bbb  | sh      | 
  12.  
  13. |  3 | ccc  | gz      | 
  14.  
  15. |  4 | ddd  | sy      | 
  16.  
  17. |  5 | eee  | fj      | 
  18.  
  19. +----+------+---------+ 
  20.  
  21. rows in set (0.00 sec) 

验证恢复数据成功!

工具虽小,但功能很强大,我们要善于发现周围的资源,利用这些武器,来帮助我们学习MySQL数据库!今后老张会继续分享新的干货,供大家学习参考! 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/293322.html<

(0)
管理的头像管理
上一篇2025-05-20 13:41
下一篇 2025-05-20 13:43

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注