MyFlash 是一个由美团点评开源的 MySQL 数据库闪回工具,它专门用于回滚 MySQL 中的 DML 操作,如 INSERT、UPDATE 和 DELETE。这个工具通过解析 MySQL 的 binlog 文件来实现数据的恢复。使用 MyFlash 前,需要确保 MySQL 的 binlog 格式设置为 ROW,并且 binlog_row_image 设置为 FULL。
以下是 MyFlash 的基本使用步骤:
- 安装依赖:确保系统已安装必要的依赖包,如 gcc 和 glib2-devel。
- 下载 MyFlash:可以从 GitHub 上获取 MyFlash 的源代码:https://github.com/Meituan-Dianping/MyFlash。
- 编译 MyFlash:在源代码目录中执行编译命令,生成可执行文件。
- 使用 MyFlash:使用命令行工具来生成回滚语句。例如,使用以下命令来生成一个针对特定 binlog 文件的回滚语句:
./flashback --binlogFileName=binlog文件名 --start-position=起始位置 --stop-position=结束位置 --databaseNames='数据库名' --tableNames='表名' --sqlTypes='DELETE|INSERT|UPDATE'
常用参数说明:
-
--databaseNames
:指定需要回滚的数据库名。 -
--tableNames
:指定需要回滚的表名。 -
--start-position
:指定回滚开始的位置。 -
--stop-position
:指定回滚结束的位置。 -
--start-datetime
:指定回滚的开始时间,格式为 %Y-%m-%d %H:%M:%S。 -
--stop-datetime
:指定回滚的结束时间,格式为 %Y-%m-%d %H:%M:%S。 -
--sqlTypes
:指定需要回滚的 SQL 类型,支持 INSERT, UPDATE, DELETE。 -
--binlogFileNames
:指定需要回滚的 binlog 文件。 -
--outBinlogFileNameBase
:指定输出的 binlog 文件前缀。
示例:
假设你想要回滚在 testdb
数据库的 user
表上,时间在 2024-06-15 14:45:30
到 2024-06-15 14:50:30
之间的 UPDATE 操作,你可以使用以下命令:
./binary/flashback --databaseNames="testdb" --tableNames="user" --start-datetime="2024-06-15 14:45:30" --stop-datetime="2024-06-15 14:50:30" --sqlTypes="UPDATE" --binlogFileNames=/var/lib/mysql/mysql-bin.000005 --outBinlogFileNameBase=user1.sql
执行后,MyFlash 会生成一个回滚文件,你可以使用 mysqlbinlog
工具查看和执行该文件来恢复数据。
请注意,MyFlash 目前主要支持 MySQL 5.6 和 5.7 版本,并且只能回滚 DML 操作。在进行任何恢复操作之前,建议备份原始数据和 binlog 文件,以防止数据丢失或损坏。更多详细信息和使用案例,可以参考 MyFlash 的官方文档和 GitHub 仓库。