数据库的里面的FLASHBACK 功能是一个让人刮目相看的功能,如果你做错了什么怎么能将那段时间的数据恢复,并且还让生产的应用不停止,这是一个数据库管理员都想拥有的功能, SQL SERVER 需要借助第三方软件的功能,可以完成数据的回滚和恢复,ORACLE 独有的FLASHBACK 功能,以及POSTGRESQL 的pg_dirtyread 功能,都可以从某些方面来进行数据的回滚和数据的找回。
当然基本上如果你对你的表进行了 TRUNCATE TABLE的操作则是不能对数据进行找回的,原理就不多说了。
MYSQL的数据找回和回滚使用的是BINLOG2SQL 这个开源的工具,其中的原理如果你懂得MYSQL的binlog 原理,则你会很快明白其可以恢复数据的方式。
这里我们可以做一个实验:
我们可以建立一个数据库 ttt ,并在库中建立一个表 ttt ,在表中建立一个字段 create table ttt (id int)
然后我们在数据库中进行相关的操作
插入操作
insert into ttt (id) values (1),(2),(3);
update 操作
update ttt set id = 2 where id = 1;
delete 操作
delete from ttt where id = 2
如果你想产生回滚的语句,直接在 上图语句的后面添加 flushback
大家可以观察上图,通过上图可以理解 BINLOG 语句的记录模式
1 无论你如何插入数据,是批量还是,单条插入,在BINLOG 里面都会逐条解析你插入的记录
2 你UPDATE 或者 DELETE 数据表一条语句多条数据的情况下,也是对每一条数据进行一个数据的记录
一句话所有的记录都是根据行来记录,而不是逻辑语句。
同时这个工具可以根据你的pos ,时间点, 日志的范围等等进行相关数据的提取。
所以有了这个工具,基本上大部分的误操作都能进行数据的找回和恢复。