@@ -23,80 +23,79 @@ pip install -r requirements.txt
2323
2424然后,我们就可以生成回滚SQL了。
2525
26- ** 背景** :误删了test库f表整张表的数据 ,需要紧急回滚。
26+ ** 背景** :误删了test库tbl表整张表的数据 ,需要紧急回滚。
2727
2828``` bash
29- 原有数据
30- mysql> select * from f ;
31- +-----+ -----+---------------------+
32- | uid | did | updateTime |
33- +-----+ -----+---------------------+
34- | 1 | 18 | 2016-12-06 12:28:18 |
35- | 2 | 19 | 2016-12-06 12:55:56 |
36- | 3 | 20 | 2016-12-07 14: 00:58 |
37- | 4 | 21 | 2016-12-07 14:01:00 |
38- +-----+ -----+---------------------+
39-
40- 误操作
41- mysql> delete from f ;
29+ test库tbl表原有数据
30+ mysql> select * from tbl ;
31+ +----+--- -----+---------------------+
32+ | id | name | addtime |
33+ +----+--- -----+---------------------+
34+ | 1 | 小赵 | 2016-12-10 00:04:33 |
35+ | 2 | 小钱 | 2016-12-10 00:04:48 |
36+ | 3 | 小孙 | 2016-12-10 00:04:51 |
37+ | 4 | 小李 | 2016-12-10 00:04:56 |
38+ +----+--- -----+---------------------+
39+ 4 rows in set (0.00 sec)
40+
41+ mysql> delete from tbl ;
4242Query OK, 4 rows affected (0.00 sec)
4343
44- f表被清空
45- mysql> select * from f ;
44+ tbl表被清空
45+ mysql> select * from tbl ;
4646Empty set (0.00 sec)
4747` ` `
4848
49- ** 回滚步骤 ** :
49+ ** 恢复数据步骤 ** :
5050
51511. 登录mysql,查看目前的binlog文件
5252
5353 ` ` ` bash
54- mysql> show master logs;
55- +------------------+-----------+
56- | Log_name | File_size |
57- +------------------+-----------+
58- | mysql-bin.000001 | 12262268 |
59- | mysql-bin.000002 | 132776 |
60- +------------------+-----------+
54+ mysql> show master logs;
55+ +------------------+-----------+
56+ | Log_name | File_size |
57+ +------------------+-----------+
58+ | mysql-bin.000046 | 12262268 |
59+ | mysql-bin.000047 | 3583 |
60+ +------------------+-----------+
6161 ` ` `
6262
63- 2. 最新的binlog文件是mysql-bin.000002 ,我们再定位误操作SQL的binlog位置
63+ 2. 最新的binlog文件是mysql-bin.000047 ,我们再定位误操作SQL的binlog位置
6464
6565 ` ` ` bash
66- $ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -t f --start-file=' mysql-bin.000002'
67-
68- 输出:
69- DELETE FROM ` test` .` f` WHERE ` did` =18 AND ` updateTime` =' 2016-12-06 12:28:18' AND ` uid` =1 LIMIT 1; # start 4 end 314
70- DELETE FROM ` test` .` f` WHERE ` did` =19 AND ` updateTime` =' 2016-12-06 12:55:56' AND ` uid` =2 LIMIT 1; # start 4 end 314
71- DELETE FROM ` test` .` f` WHERE ` did` =20 AND ` updateTime` =' 2016-12-07 14:00:58' AND ` uid` =3 LIMIT 1; # start 4 end 314
72- DELETE FROM ` test` .` f` WHERE ` did` =21 AND ` updateTime` =' 2016-12-07 14:01:00' AND ` uid` =4 LIMIT 1; # start 4 end 314
66+ $ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -ttbl --start-file=' mysql-bin.000047'
67+ 输出:
68+ DELETE FROM ` test` .` tbl` WHERE ` addtime` =' 2016-12-10 00:04:33' AND ` id` =1 AND ` name` =' 小赵' LIMIT 1; # start 3346 end 3556
69+ DELETE FROM ` test` .` tbl` WHERE ` addtime` =' 2016-12-10 00:04:48' AND ` id` =2 AND ` name` =' 小钱' LIMIT 1; # start 3346 end 3556
70+ DELETE FROM ` test` .` tbl` WHERE ` addtime` =' 2016-12-10 00:04:51' AND ` id` =3 AND ` name` =' 小孙' LIMIT 1; # start 3346 end 3556
71+ DELETE FROM ` test` .` tbl` WHERE ` addtime` =' 2016-12-10 00:04:56' AND ` id` =4 AND ` name` =' 小李' LIMIT 1; # start 3346 end 3556
7372 ` ` `
74- 2. 生成回滚sql,并检查回滚sql是否正确
73+
74+ 3. 生成回滚sql,并检查回滚sql是否正确
7575
7676 ` ` ` bash
77- $ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -t f --start-file=' mysql-bin.000002' --start-pos=4 --end-pos=314 -B
78-
79- 输出:
80- INSERT INTO ` test` .` f` (` did` , ` updateTime` , ` uid` ) VALUES (21, ' 2016-12-07 14:01:00' , 4); # start 4 end 314
81- INSERT INTO ` test` .` f` (` did` , ` updateTime` , ` uid` ) VALUES (20, ' 2016-12-07 14:00:58' , 3); # start 4 end 314
82- INSERT INTO ` test` .` f` (` did` , ` updateTime` , ` uid` ) VALUES (19, ' 2016-12-06 12:55:56' , 2); # start 4 end 314
83- INSERT INTO ` test` .` f` (` did` , ` updateTime` , ` uid` ) VALUES (18, ' 2016-12-06 12:28:18' , 1); # start 4 end 314
77+ $ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -ttbl --start-file=' mysql-bin.000047' --start-pos=3346 --end-pos=3556 -B
78+ 输出:
79+ INSERT INTO ` test` .` tbl` (` addtime` , ` id` , ` name` ) VALUES (' 2016-12-10 00:04:56' , 4, ' 小李' ); # start 3346 end 3556
80+ INSERT INTO ` test` .` tbl` (` addtime` , ` id` , ` name` ) VALUES (' 2016-12-10 00:04:51' , 3, ' 小孙' ); # start 3346 end 3556
81+ INSERT INTO ` test` .` tbl` (` addtime` , ` id` , ` name` ) VALUES (' 2016-12-10 00:04:48' , 2, ' 小钱' ); # start 3346 end 3556
82+ INSERT INTO ` test` .` tbl` (` addtime` , ` id` , ` name` ) VALUES (' 2016-12-10 00:04:33' , 1, ' 小赵' ); # start 3346 end 3556
8483 ` ` `
85- 3. 确认回滚sql正确,执行回滚语句。登录mysql,数据回滚成功。
84+
85+ 4. 确认回滚sql正确,执行回滚语句。登录mysql确认,数据回滚成功。
8686
8787 ` ` ` bash
88- $ python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -t f --start-file=' mysql-bin.000002' --start-pos=4 --end-pos=314 -B | mysql -h127.0.0.1 -P3306 -uadmin -p' admin'
89-
90- mysql> select * from f;
91- +-----+-----+---------------------+
92- | uid | did | updateTime |
93- +-----+-----+---------------------+
94- | 1 | 18 | 2016-12-06 12:28:18 |
95- | 2 | 19 | 2016-12-06 12:55:56 |
96- | 3 | 20 | 2016-12-07 14:00:58 |
97- | 4 | 21 | 2016-12-07 14:01:00 |
98- +-----+-----+---------------------+
99-
88+ $ python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p' admin' -dtest -ttbl --start-file=' mysql-bin.000047' --start-pos=3346 --end-pos=3556 -B | mysql -h127.0.0.1 -P3306 -uadmin -p' admin'
89+
90+ mysql> select * from tbl;
91+ +----+--------+---------------------+
92+ | id | name | addtime |
93+ +----+--------+---------------------+
94+ | 1 | 小赵 | 2016-12-10 00:04:33 |
95+ | 2 | 小钱 | 2016-12-10 00:04:48 |
96+ | 3 | 小孙 | 2016-12-10 00:04:51 |
97+ | 4 | 小李 | 2016-12-10 00:04:56 |
98+ +----+--------+---------------------+
10099 ` ` `
101100
102101至此,不用再担心被炒鱿鱼了。
0 commit comments