作者:网易数据库团队
在《删库不跑路!数据库误删有几种恢复方式?》一文中,我们曾提到处理数据库误删除的几种方法,其中一种是数据闪回(flashback),目前我们在开源实现的基础上,对DDL flashback方案进行了优化,解决了其存在的兼容性等问题。现对其进行简单介绍。
背景需求
Flashback概念最早出自Oracle,用于快速恢复用户的误操作,Flashback for MySQL是由阿里彭立勋于2012-5-2贡献的patch给MySQL官方5.5.18版本,此版本基于mysqlbinlog工具通过-B,--flashback参数对binlog中的DML逆操作生成闪回日志进行恢复,但此版本不支持DDL flashback。
随后2012-7-10阿里林晓斌贡献的patch支持DDL flashback,原理是通过rename的方式备份数据表,并增加FLASHBACK_EVENT event类型记录rename后的statement信息,通过mysqlbinlog工具-B,--flashback参数生成闪回log进行恢复。
DDL flashback版本存在三个问题:兼容性问题:引入了新的event类型FLASHBACK_EVENT,如果是主从复制场景,从库MySQL的版本未引入DDL flashback 功能时,从库回放relay-log时会因解析不了FLASHBACK_EVENT event而造成复制中断。
可维护性:回收库#bak_database的创建是写在系统库脚本中,随着mysqld的初始化进行创建,未记录binlog,同样如果从库版本没有引入DDL flashback功能,那么复制过来的renam