delete和truncate/drop恢复数据的过程
| 该工具注意事项
 1.binlog格式必须为row,且binlog_row_image=full 2.仅支持5.6与5.7 3.只能回滚DML(增、删、改)  | 
| mysql> show variables like '%binlog_format%';
 +---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| binlog_format | ROW   | 
+---------------+-------+ 
1 row in set (0.00 sec) 
 | 
|  mysql> select * from lbg;
 +----+-----------+------+ 
| id | name      | ha   | 
+----+-----------+------+ 
|  1 | 1,2,3,4,5 |    1 | 
|  2 | 1,2,3,4,5 |    1 | 
|  3 | 1,2,3,4,5 |    2 | 
|  4 | 1,2,3,4,5 |    2 | 
|  5 | 1,2,3,4,5 |    3 | 
|  9 | 1,2,3,4,5 |    4 | 
| 10 | 1,2,3,4,5 |    4 | 
| 81 | 1,2,3,4,5 |    4 | 
+----+-----------+------+ 
 | 
|  mysql> delete from lbg where id >=10;
 Query OK, 2 rows affected (0.01 sec) 
再查看: 
mysql> select * from lbg; 
+----+-----------+------+ 
| id | name      | ha   | 
+----+-----------+------+ 
|  1 | 1,2,3,4,5 |    1 | 
|  2 | 1,2,3,4,5 |    1 | 
|  3 | 1,2,3,4,5 |    2 | 
|  4 | 1,2,3,4,5 |    2 | 
|  5 | 1,2,3,4,5 |    3 | 
|  9 | 1,2,3,4,5 |    4 | 
+----+-----------+------+ 
 | 
|  mysql> insert into lbg values (77,'a',77);
 Query OK, 1 row affected (0.01 sec) 
mysql> insert into lbg values (88,'b',88); 
Query OK, 1 row affected (0.01 sec) 
mysql> insert into lbg values (99,'c',99); 
Query OK, 1 row affected (0.00 sec) 
mysql> select * from lbg; 
+----+-----------+------+ 
| id | name      | ha   | 
+----+-----------+------+ 
|  1 | 1,2,3,4,5 |    1 | 
|  2 | 1,2,3,4,5 |    1 | 
|  3 | 1,2,3,4,5 |    2 | 
|  4 | 1,2,3,4,5 |    2 | 
|  5 | 1,2,3,4,5 |    3 | 
|  9 | 1,2,3,4,5 |    4 | 
| 77 | a         |   77 | 
| 88 | b         |   88 | 
| 99 | c         |   99 | 
+----+-----------+------+ 
9 rows in set (0.00 sec) 
 | 
| 1.找到当前binlog.(注意也可能不是当前binlog)
 mysql> show binary logs; 
+------------------+-----------+ 
| Log_name         | File_size | 
+------------------+-----------+ 
| mysql-bin.000009 |     12178 | 
| mysql-bin.000010 |       177 | 
| mysql-bin.000011 |      3356 | 
| mysql-bin.000012 |      1245 | 
+------------------+-----------+ 
4 rows in set (0.00 sec) 
发现当前binlog是000012. 
 | 
|  [root@master mysql3306]# mysqlbinlog mysql-bin.000012 -vv >/tmp/lbg.binlog
 [root@master mysql3306]# vim /tmp/lbg.binlog  
找到这段: 
#181108 13:28:58 server id 88083306  end_log_pos 416 CRC32 0x8e01100e   Delete_rows: table id 108 flags: STMT_END_F 
BEGIN 
; 
# at 292 
#181108 13:28:58 server id 88083306  end_log_pos 343 CRC32 0xed8c903f   Table_map: `test1`.`lbg` mapped to number 108 
# at 343 
#181108 13:28:58 server id 88083306  end_log_pos 416 CRC32 0x8e01100e   Delete_rows: table id 108 flags: STMT_END_F 
BINLOG ' 
msnjWxNqC0AFMwAAAFcBAAAAAGwAAAAAAAEABXRlc3QxAANsYmcAAwMPAwJQAAY/kIzt 
msnjWyBqC0AFSQAAAKABAAAAAGwAAAAAAAEAAgAD//gKAAAACTEsMiwzLDQsNQQAAAD4UQAAAAkx 
LDIsMyw0LDUEAAAADhABjg== 
'; 
### DELETE FROM `test1`.`lbg` 
### WHERE 
###   @1=10 
###   @2='1,2,3,4,5' 
###   @3=4 
### DELETE FROM `test1`.`lbg` 
### WHERE 
###   @1=81 
###   @2='1,2,3,4,5' 
###   @3=4 
# at 416 
#181108 13:28:58 server id 88083306  end_log_pos 447 CRC32 0x06d673a3   Xid = 11 
COMMIT; 
# at 447 
#181108 13:30:39 server id 88083306  end_log_pos 512 CRC32 0x4a005c6d   Anonymous_GTID  last_committed=1        sequence_number=2       rbr_only=yes 
可知开始和截止pos是292和447.(分别是BEGIN和COMMIT后一行的数据) 
 | 
|  [root@master ~]# /soft/MyFlash-master/binary/flashback --start-position=292 --stop-position=447 --sqlTypes='DELETE' --binlogFileNames=/home/mysql3306/mysql3306/mysql-bin.000012
 注意使用myflash的文件不能是之前导出的tmp/lbg.binlog,而是源binlog文件或者拷贝出来的binlog文件。 
 | 
|  在当前目录会产生二进制文件 binlog_output_base.flashback:
 [root@master ~]# ls 
anaconda-ks.cfg  binlog_output_base.flashback  c.py  e.py  g.py  initial-setup-ks.cfg  j.py 
a.py             b.py                          d.py  f.py  h.py  i.py                  test.py 
查看该二进制文件: 
[root@master ~]# mysqlbinlog binlog_output_base.flashback  -vv >/tmp/myflash.binlog 
[root@master ~]# vim /tmp/myflash.binlog  
发现有insert数据了: 
BINLOG ' 
msnjWxNqC0AFMwAAAK4AAAAAAGwAAAAAAAEABXRlc3QxAANsYmcAAwMPAwJQAAY/kIzt 
msnjWx5qC0AFSQAAAPcAAAAAAGwAAAAAAAEAAgAD//gKAAAACTEsMiwzLDQsNQQAAAD4UQAAAAkx 
LDIsMyw0LDUEAAAADhABjg== 
'; 
### INSERT INTO `test1`.`lbg` 
### SET 
###   @1=10 
###   @2='1,2,3,4,5' 
###   @3=4 
 | 
|  mysql> source /tmp/myflash.binlog
 查看数据: 
mysql> select * from lbg; 
+----+-----------+------+ 
| id | name      | ha   | 
+----+-----------+------+ 
|  1 | 1,2,3,4,5 |    1 | 
|  2 | 1,2,3,4,5 |    1 | 
|  3 | 1,2,3,4,5 |    2 | 
|  4 | 1,2,3,4,5 |    2 | 
|  5 | 1,2,3,4,5 |    3 | 
|  9 | 1,2,3,4,5 |    4 | 
| 10 | 1,2,3,4,5 |    4 | 
| 77 | a         |   77 | 
| 81 | 1,2,3,4,5 |    4 | 
| 88 | b         |   88 | 
| 99 | c         |   99 | 
+----+-----------+------+ 
至此数据成功找回。 
 | 
|  mysql> select * from lbg;
 +----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
|  1 | a    |    1 | 
|  2 | b    |    2 | 
|  3 | c    |    3 | 
+----+------+------+ 
mysql> select * from test; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
| 11 | aa   |   11 | 
| 22 | bb   |   22 | 
| 33 | cc   |   33 | 
+----+------+------+ 
 | 
| [root@master mysql3306]# mysqldump -uroot -proot -S /tmp/mysql3306.sock --master-data=2 --single-transaction -A > /tmp/all.sql | 
|  mysql> insert into lbg values (4,'d',4);
 Query OK, 1 row affected (0.00 sec) 
mysql> insert into lbg values (5,'e',5); 
Query OK, 1 row affected (0.01 sec) 
mysql> insert into test values (44,'dd',44); 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into test values (55,'ee',55); 
Query OK, 1 row affected (0.29 sec) 
查询数据: 
mysql> select * from lbg; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
|  1 | a    |    1 | 
|  2 | b    |    2 | 
|  3 | c    |    3 | 
|  4 | d    |    4 | 
|  5 | e    |    5 | 
+----+------+------+ 
mysql> select * from test; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
| 11 | aa   |   11 | 
| 22 | bb   |   22 | 
| 33 | cc   |   33 | 
| 44 | dd   |   44 | 
| 55 | ee   |   55 | 
+----+------+------+ 
 | 
|  mysql> truncate table lbg;
 Query OK, 0 rows affected (0.31 sec) 
mysql> drop table test; 
Query OK, 0 rows affected (0.30 sec) 
 | 
| mysql> insert into lbg values (111,'aaa',111);
 Query OK, 1 row affected (0.10 sec) 
mysql> insert into lbg values (222,'bbb',222); 
Query OK, 1 row affected (0.01 sec) 
 | 
| [root@master mysql3306]# scp /home/mysql3306/mysql3306/mysql-bin.000012 root@192.168.88.9:/tmp
 [root@master mysql3306]# scp /tmp/all.sql root@192.168.88.9:/tmp 
 | 
|  mysql> source /tmp/all.sql
 此时数据如下: 
mysql> select * from lbg; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
|  1 | a    |    1 | 
|  2 | b    |    2 | 
|  3 | c    |    3 | 
+----+------+------+ 
3 rows in set (0.00 sec) 
mysql> select * from test; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
| 11 | aa   |   11 | 
| 22 | bb   |   22 | 
| 33 | cc   |   33 | 
+----+------+------+ 
3 rows in set (0.00 sec) 
 | 
| [root@lbg2 ~]# vim /tmp/all.sql
 在/tmp/all.sql里找到如下一行: 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=4601; 
可以确定pos点是4601 
 | 
|  [root@lbg2 ~]# mysqlbinlog  /tmp/mysql-bin.000012 -vv > /tmp/lbg.binlog
 [root@lbg2 ~]# vim /tmp/lbg.binlog 
摘要内容如下: 
COMMIT; 
# at 6203 
#181108 13:28:58 server id 88083306  end_log_pos 6268 CRC32 0xe6be1409  Anonymous_GTID  last_committed=23       sequence_number=24      rbr_only=no 
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'; 
# at 6268 
#181108 13:28:58 server id 88083306  end_log_pos 6354 CRC32 0x685261c5  Query   thread_id=6     exec_time=7113  error_code=0 
SET TIMESTAMP=1541654938; 
truncate table lbg 
; 
# at 6354 
#181108 13:28:58 server id 88083306  end_log_pos 6419 CRC32 0xfc171fb0  Anonymous_GTID  last_committed=24       sequence_number=25      rbr_only=no 
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'; 
# at 6419 
#181108 13:28:58 server id 88083306  end_log_pos 6538 CRC32 0x901f7138  Query   thread_id=6     exec_time=7131  error_code=0 
SET TIMESTAMP=1541654938; 
DROP TABLE `test` 
; 
# at 6538 
确定truncate时的binlog的pos点大致为6203。 
 | 
|  [root@lbg2 ~]# mysqlbinlog  /tmp/mysql-bin.000012 --start-position=4601 --stop-position=6203   -vv > /tmp/mysql.binlog
 mysql> source /tmp/mysql.binlog 
mysql> select * from lbg; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
|  1 | a    |    1 | 
|  2 | b    |    2 | 
|  3 | c    |    3 | 
|  4 | d    |    4 | 
|  5 | e    |    5 | 
+----+------+------+ 
5 rows in set (0.00 sec) 
mysql> select * from test; 
+----+------+------+ 
| id | name | ha   | 
+----+------+------+ 
| 11 | aa   |   11 | 
| 22 | bb   |   22 | 
| 33 | cc   |   33 | 
| 44 | dd   |   44 | 
| 55 | ee   |   55 | 
+----+------+------+ 
至此被删除的数据已恢复,最后可选择数据导出再导入到正式库里。 
 | 
|   1.先应用全备,并找到全备的pos点。
   2.在binlog中删除掉delete那段的乱码数据。 
  3.根据全备的pos点应用已在第2步修改的binlog文件从而找回数据。 
 | 
delete和truncate/drop恢复数据的过程的更多相关文章
- 转:SqlServer2008误操作数据(delete或者update)后恢复数据
		
Sqlserver2008误操作数据(delete或者update)后恢复数据(转) 实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如 ...
 - SqlServer2008误操作数据(delete或者update)后恢复数据
		
实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如果没有加上where条件或者where条件不合理,那么导致的结果可想而知,如果操作的又 ...
 - delete,truncate ,drop区别
		
use [database_name]go delete from table_nameTest where FCRTime<(Select CONVERT(varchar(100),DATE ...
 - 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的差别,sql文件导入
		
 1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...
 - Ubantu 使用extundelete恢复数据
		
所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速.有效地恢复数据呢?本文我们就来介绍一下Linux系统下常用的几个数据恢复工具. 一.如何使用“rm -rf ...
 - xtrabackup备份和恢复数据脚本
		
该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...
 - 数据库中drop、delete与truncate的区别
		
数据库中drop.delete与truncate的区别 drop直接删掉表: truncate删除表中数据,再插入时自增长id又从1开始 :delete删除表中数据,可以加where字句. (1) D ...
 - delete、truncate、drop
		
DELETE DELETE属于数据库DML操作语言,只删除数据不删除表的结构,会走事务,执行时会触发trigger:每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进 ...
 - oracle中drop、delete和truncate的区别
		
oracle中drop.delete和truncate的区别 oracle中可以使用drop.delete和truncate三个命令来删除数据库中的表,网上有许多文章和教程专门讲解了它们之间的异同,我 ...
 
随机推荐
- iot平台
			
iot平台 iot平台卓岚云是一个免费的物联网云平台,用户只需按步骤完成注册即可免费使用卓岚云 .支持PC.Android.iOS多平台终端.用户可以在任何地方远程访问任何地方的串口设备,并对远程设备 ...
 - day30 Pyhton 面向对象 继承.装饰器
			
一面向对象相关 谈谈你对面向对象的理解 1.泛泛谈:什么情况下使用面向对象 2.针对面向对象的 封装 继承 多态一个一个的谈 3.根据你工作中的实际情况对应来举例子 封装 1.广义上:普遍的大家认为的 ...
 - 如果你想or即将成为一名程序员,那你需要知道这些东西!上岗须知~
			
前两天公司学院的同学给我看了一下即将入职的应届生的数量,真是不少.感慨一下,一批新人即将到来,而自己又老去了一岁.码农是一个必将终身学习的职业.而相关的知识越来越多了.接下来该学什么?接下来该干什么? ...
 - docker设置http访问
			
1 编辑配置文件 vim /etc/docker/daemon.json { "registry-mirrors": ["https://a4fyjv0u.mirr ...
 - redis集群搭建 不用ruby
			
redis 从5开始 可以直接用redis-cli命令创建集群了,不用那么麻烦 安装ruby环境 redis配置文件需要修改的地方 port 7000 cluster-enabled yes clus ...
 - centos8平台yum无法安装一些常用软件的解决,如:screen,iftop,nethogs
			
一,例如:安装screen时报错: [root@localhost liuhongdi]# yum install screen 上次元数据过期检查:17:39:58 前,执行于 2020年03月18 ...
 - centos8平台搭建mysql8数据库主从同步
			
一,两台服务器的规划 a服务器:主机名:yjweb ip: 121.122.123.47 角色:主库 server-id:1 j服务器:主机名: os3 ip: 121.122.123.134 角色: ...
 - 使用OLEDB方式 读取excel和csv文件
			
/// <summary> /// 使用OLEDB读取excel和csv文件 /// </summary> /// <param name="path" ...
 - 通过命令行上传ipa到appstore
			
搞持续集成自动化打包上传到appstore遇到这个问题,记录一下. 其实主要就一条到命令: xcrun altool --upload-app -f xxxx.ipa -u "yanqizh ...
 - 2017年暑假ACM集训日志
			
20170710: hdu1074,hdu1087,hdu1114,hdu1159,hdu1160,hdu1171,hdu1176,hdu1010,hdu1203 20170711: hdu1231, ...