由于前面出现过几个需求,或者误操作,或者测试,需要我把某张表恢复到操作之前的一个状态,前面在生产中有过几次经历,实在太痛苦了,下面是一张表被误删除了,我的步骤是:
1 用全备恢复整个库(恢复到其他环境)
2 找到全备结束时间点对应的binlog,然后根据时间找对应的pos点
3 接着2中的pos点把数据往后刷,直到刷到误操作之前的时间点。
3 在这套全新库中将表导出,然后在现有生产库导入
上面的动作存在一个问题,前提是我在误操作到发现的这个时间段,这个表没有数据写入,不然肯定会有数据不一致或者丢失。
下面我介绍另一个方法,闪回 flash back
mysql> use leochentest;
Database changed
mysql> create table leochen(id int,name varchar(10));
Query OK, 0 rows affected (0.05 sec)
mysql> insert into leochen values (1,'leochen'),(2,'chenleo');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from leochen;
+------+------------+
| id | name |
+------+------------+
| 1 | leochen |
| 2 | chenleo |
+------+------------+
mysql> update leochen set name = 'leochenlia' where id = 2;
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 1
在做闪回之前
mysql> select * from leochen;
+------+------------+
| id | name |
+------+------------+
| 1 | leochen |
| 2 | leochenlia |
+------+------------+
下面开始操作
mysqlbinlog -vv dbnoe05-bin.000004 |egrep -i -C 20 'update|leochen'
mysqlbinlog -B -vv --start-position=648 --stop-position=948 dbnoexx-bin.000004 | mysql -uroot -pxxx
biu biu biu~~~
mysql> select * from leochen;
+------+---------+
| id | name |
+------+---------+
| 1 | leochen |
| 2 | chenleo |
+------+---------+
2 rows in set (0.00 sec)