【mysqlデータテーブル復元】テーブル全体のデータを誤って削除し、緊急ロールバックが必要
8257 ワード
適用事例
テーブル全体のデータを誤って削除するには、緊急ロールバックが必要です.
データを復元するには、次の手順に従います. mysqlにログインし、現在のbinlogファイル を表示します.最新のbinlogファイルはmysql-binです.000052、誤操作SQLのbinlog位置を再配置します.誤操作者は大まかな誤操作時間しか知らず,大まかな時間に基づいてデータをフィルタリングする. 誤操作sqlの正確な位置が728-938の間にあることを得て、さらに位置によってフィルタリングし、flashbackモードを使用してロールバックsqlを生成し、ロールバックsqlが正しいかどうかを確認します(注:実際の環境では、このステップで必要なsqlをさらにフィルタリングすることがよくあります.grep、エディタなどと組み合わせて) ロールバックsqlが正しいことを確認し、ロールバック文を実行します.mysqlにログインして確認し、データのロールバックに成功しました.
参照リンク:https://github.com/danfengcao/binlog2sql
テーブル全体のデータを誤って削除するには、緊急ロールバックが必要です.
test tbl
mysql> select * from tbl;
+----+--------+---------------------+
| id | name | addtime |
+----+--------+---------------------+
| 1 | | 2016-12-10 00:04:33 |
| 2 | | 2016-12-10 00:04:48 |
| 3 | | 2016-12-13 20:25:00 |
| 4 | | 2016-12-12 00:00:00 |
+----+--------+---------------------+
4 rows in set (0.00 sec)
mysql> delete from tbl;
Query OK, 4 rows affected (0.00 sec)
20:28 ,tbl
mysql> select * from tbl;
Empty set (0.00 sec)
データを復元するには、次の手順に従います.
mysql> show master status;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000051 | 967 |
| mysql-bin.000052 | 965 |
+------------------+-----------+
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'
:
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
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
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
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
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
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
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
:
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
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
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
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
shell> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < rollback.sql
mysql> select * from tbl;
+----+--------+---------------------+
| id | name | addtime |
+----+--------+---------------------+
| 1 | | 2016-12-10 00:04:33 |
| 2 | | 2016-12-10 00:04:48 |
| 3 | | 2016-12-13 20:25:00 |
| 4 | | 2016-12-12 00:00:00 |
+----+--------+---------------------+
参照リンク:https://github.com/danfengcao/binlog2sql