加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

MySQL数据误删除怎么办?MySQL闪回器材来帮你

发布时间:2019-10-12 07:54:06 所属栏目:建站 来源:雪竹谈运维
导读:概述 Binlog2sql是一个Python开拓开源的MySQL Binlog理会器材,可以或许将Binlog理会为原始的SQL,也支持将Binlog理会为回滚的SQL,去除主键的INSERT SQL,是DBA和运维职员数据规复好协助。 一、安装设置 1.1 用途 数据快速回滚(闪回) 主从切换后新master丢数

闪回具体先容可拜见example目次下《闪回道理与拭魅战》example/mysql-flashback-priciple-and-practice.md

  1. test库tbl表原稀有据 
  2. mysql> select * from tbl; 
  3. +----+--------+---------------------+ 
  4. | id | name | addtime | 
  5. +----+--------+---------------------+ 
  6. | 1 | 小赵 | 2016-12-10 00:04:33 | 
  7. | 2 | 小钱 | 2016-12-10 00:04:48 | 
  8. | 3 | 小孙 | 2016-12-13 20:25:00 | 
  9. | 4 | 小李 | 2016-12-12 00:00:00 | 
  10. +----+--------+---------------------+ 
  11. 4 rows in set (0.00 sec) 
  12. ​ 
  13. mysql> delete from tbl; 
  14. Query OK, 4 rows affected (0.00 sec) 
  15. ​ 
  16. 20:28时,tbl表误操纵被清空 
  17. mysql> select * from tbl; 
  18. Empty set (0.00 sec) 

规复数据步调:

1、登录mysql,查察今朝的binlog文件

  1. mysql> show master status; 
  2. +------------------+-----------+ 
  3. | Log_name | File_size | 
  4. +------------------+-----------+ 
  5. | mysql-bin.000051 | 967 | 
  6. | mysql-bin.000052 | 965 | 
  7. +------------------+-----------+ 

2、最新的binlog文件是mysql-bin.000052,我们再定位误操纵SQL的binlog位置。误操纵人只能知道大抵的误操纵时刻,我们按照大抵时刻过滤数据。

  1. shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13 20:30:00' 
  2. 输出: 
  3. 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:26 
  4. UPDATE `test`.`tbl` SET `addtime`='2016-12-12 00:00:00', `id`=4, `name`='小李' WHERE `addtime`='2016-12-13 20:26:00' AND `id`=4 AND `name`='小李' LIMIT 1; #start 514 end 701 time 2016-12-13 20:27:07 
  5. DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:33' AND `id`=1 AND `name`='小赵' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
  6. DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:48' AND `id`=2 AND `name`='小钱' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
  7. DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `name`='小孙' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
  8. DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-12 00:00:00' AND `id`=4 AND `name`='小李' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 

3、我们获得了误操纵sql的精确位置在728-938之间,再按照位置进一步过滤,行使flashback模式天生回滚sql,搜查回滚sql是否正确(注:真真相形下,此步常常会进一步筛选出必要的sql。团结grep、编辑器等)

  1. shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-position=3346 --stop-position=3556 -B > rollback.sql | cat 
  2. 输出: 
  3. 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:05 
  4. INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, '小孙'); #start 728 end 938 time 2016-12-13 20:28:05 
  5. INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48', 2, '小钱'); #start 728 end 938 time 2016-12-13 20:28:05 
  6. INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:33', 1, '小赵'); #start 728 end 938 time 2016-12-13 20:28:05 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读