MySQL数据库管理人员经常会遇到由于误操作导致数据丢失的情况,此时就需要使用到MySQL的flashback(闪回)功能。使用这个功能可以将数据库恢复到以前的某个时间点,或者某个binlog的某个pos,从而快速恢复数据。相比于传统的全备+增备方法,flashback更为快速和简单。

MySQL的flashback功能是利用binlog完成的,第一个实现该功能的是阿里云的彭立勋。其原理是利用flashback工具(-B参数)对基于行的binlog进行逆向操作:delete反向生成insert、update生成反向的update、insert反向生成delete。在MySQL的binlog中记录了所有的变更情况,因此我们可以使用binlog重现所记录的所有操作。

需要注意的是,使用mysqlbinlog flashback工具时必须将binlog_format设置为row。另外,要想使用mysqlbinlog flashback工具,需要先进行安装,这个过程需要解决依赖库问题。可以通过直接替换/lib64软连接的方式,也可以采用ldconfig来解决。

使用mysqlbinlog flashback工具时,需要特别注意以下几个问题。首先,binlog日志格式必须是ROW格式;其次,一个事务中的DML语句不仅会逆向转换,并且语句顺序也会发生颠倒;最后,只支持insert、update、delete语句,不支持drop、truncate、alter等DDL语句。

最后值得一提的是,美团点评还开发了一款新的闪回工具MyFlash,据说比mysqlbinlog更高效。