误操作数据库的事情,估计不少开发人员都可能会遇到。毕竟常在河边走,哪有不湿鞋的呢?
今天,我给大家讲一下 MySQL 中的“误操作”回魂术。不管是你误删除数据,还是插入数据,也或者是更新了数据都可以通过我的方法来解决。
前面我也写过很多删除跑路,恢复数据库等操作的实战,但是有人反馈说,操作起来太难了。所以,我今天给大家推荐一个工具。用它来解决数据库的误操作问题,将大大缩短我们恢复数据的时间和难度。
网上关于 Flashback 的工具其实比较多。大家可以自行的去选择,它们的核心原理都是根据 binlog 日志,把 delete 反向生成 insert、把 update 生成反向的 update、把 insert 反向生成 delete。
而且这些 Flashback 工具,都还有一个共同点,binlog 格式必须为 row 且 binlog_row_image=full。
关于 Flashback 工具,网上开源的有很多,比如:binlog2sql、MyFlash、淘宝彭立勋的 mysqlbinlog 等。今天我主要解释美团的 MyFlash 的使用。
为了方便演示,我们先创建一个测试的表:
接着我们需要安装一个工具。可以直接下载 MyFlash 的源码,执行下面的命令,进行编译。
下面,我们可以测试一下插入的回滚操作。
当我们误操作插入了不想要的数据后,可以执行下面的命令,就可以把插入的数据给干掉了。
其他的删除,更新操作都一样。就算是混合在一起,只要有 binlog,且格式必须为 row 且 binlog_row_image=full,就可以恢复。所以很多公司的线上环境的 binlog 全部是ROW 模式。
不要小看 binlog,它可是 MySQL 高可用和可靠性的基石。其实,MySQL 有很多功能都是落后的,这也正是 mariadb 等数据库崛起的原因。可以想象,AI 数据库绝对是未来的一个趋势!