fix format

This commit is contained in:
danfengcao 2016-12-21 17:33:00 +08:00
parent cb6615d285
commit fc7b07852e
2 changed files with 17 additions and 17 deletions

View File

@ -162,10 +162,10 @@ DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `n
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是否正确
3. 我们得到了误操作sql的准确位置在728-938之间再根据位置进一步过滤使用flashback模式生成回滚sql检查回滚sql是否正确(注真实环境下此步经常会进一步筛选出需要的sql。结合grep、编辑器等)
```bash
shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B
```bash
shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=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
@ -173,12 +173,12 @@ INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48',
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
```
3. 确认回滚sql正确执行回滚语句。登录mysql确认数据回滚成功。
4. 确认回滚sql正确执行回滚语句。登录mysql确认数据回滚成功。
```bash
shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B | mysql -h127.0.0.1 -P3306 -uadmin -p'admin'
```bash
shell> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < rollback.sql
mysql> select * from tbl;
mysql> select * from tbl;
+----+--------+---------------------+
| id | name | addtime |
+----+--------+---------------------+

View File

@ -1,12 +1,12 @@
MySQL误操作后如何快速恢复数据
========================
基本上每个跟数据库打交道的程序员当然也可能是你同事都会碰一个问题MySQL误操作后如何快速回滚比如delete一张表忘加限制条件整张表都没了。假如这还是线上环境核心业务数据那这事就闹大了。误操作后能快速回滚数据是非常重要的。
基本上每个跟数据库打交道的程序员当然也可能是你同事都会碰一个问题MySQL误操作后如何快速回滚比如不小心update了整张表的某个字段或者delete一张表忘加限制条件整张表都没了。假如这还是线上环境核心业务数据那这事就闹大了。误操作后能快速回滚数据是非常重要的。
传统解法
===
用全量备份重搭实例再利用增量binlog备份恢复到误操作之前的状态。然后跳过误操作的SQL再继续应用binlog。此法费时费力不值得再推荐。
用全量备份重搭实例再利用增量binlog备份恢复到误操作之前的状态。然后跳过误操作的SQL再继续应用binlog。对于DML的回滚此法费时费力,不值得再推荐。
利用binlog2sql快速闪回
===
@ -79,10 +79,10 @@ DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `n
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是否正确
3. 我们得到了误操作sql的准确位置在728-938之间再根据位置过滤使用flashback模式生成回滚sql检查回滚sql是否正确(注真实环境下此步经常会进一步筛选出需要的sql。结合grep、编辑器等)
```bash
shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B
```bash
shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=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
@ -90,12 +90,12 @@ INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48',
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
```
3. 确认回滚sql正确执行回滚语句。登录mysql确认数据回滚成功。
4. 确认回滚sql正确执行回滚语句。登录mysql确认数据回滚成功。
```bash
shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B | mysql -h127.0.0.1 -P3306 -uadmin -p'admin'
```bash
shell> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < rollback.sql
mysql> select * from tbl;
mysql> select * from tbl;
+----+--------+---------------------+
| id | name | addtime |
+----+--------+---------------------+
@ -104,7 +104,7 @@ mysql> select * from tbl;
| 3 | 小孙 | 2016-12-13 20:25:00 |
| 4 | 小李 | 2016-12-12 00:00:00 |
+----+--------+---------------------+
```
```
至此,不用再担心被炒鱿鱼了。