該工具注意事項 1.binlog格式必須爲row,且binlog_row_image=fullmysql 2.僅支持5.6與5.7sql 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文件從而找回數據。
|