binlog 解析工具——my2sql
目录
- 一、my2sql 的定义与核心用途
- 二、使用方法与具体示例
- 1. **安装与配置**
- 2. **常用命令参数**
- 3. **具体案例:误删数据恢复**
- 三、类似工具对比
- 四、注意事项
一、my2sql 的定义与核心用途
my2sql 是一款基于 Go 语言开发的 MySQL binlog 解析工具,支持从二进制日志(binlog)中生成原始 SQL、回滚 SQL(闪回 SQL)、去除主键的 INSERT SQL 等,还能生成 DML 操作统计信息。其核心用途包括:
- 数据快速回滚(闪回):通过逆向解析 binlog 生成反向 SQL,恢复误删除或误修改的数据。
- 主从数据一致性修复:主从切换后新主库数据丢失时,通过 binlog 恢复数据。
- 生成标准 SQL 与统计信息:用于审计、数据迁移,或分析高频更新表、大事务及主从延迟问题。
- 复杂数据类型支持:支持 JSON、BLOB、TEXT、Emoji 等数据类型解析,覆盖多数工具无法处理的场景。
二、使用方法与具体示例
1. 安装与配置
- 安装方式:
- 二进制文件安装:直接下载预编译的 Linux 二进制文件(如 CentOS 7.x 版本)。
- 源码编译:需 Go 环境,通过
git clone
克隆仓库后执行go build
。
- 权限要求:MySQL 用户需具备
SELECT
、REPLICATION SLAVE
、REPLICATION CLIENT
权限。 - MySQL 配置:使用闪回功能时,需
binlog_format=ROW
且binlog_row_image=FULL
。
2. 常用命令参数
- 核心参数:
-work-type
:指定输出类型(2sql
生成原始 SQL,rollback
生成回滚 SQL,stats
统计 DML 信息)。-start-file
/-start-datetime
:指定解析的起始 binlog 文件或时间点。-databases
/-tables
:过滤库或表。-output-dir
:结果输出目录。
3. 具体案例:误删数据恢复
场景:误删除 test.ceshi
表中 id=1
的数据。
步骤:
- 定位误操作 binlog:
确定误操作的时间范围及位点(如起始位置 1163,结束位置 1207)。mysqlbinlog --base64-output=decode-rows -v mysql-bin.000006 | grep -B 20 'DELETE'
- 生成回滚 SQL:
./my2sql -user root -password 123456 -host 127.0.0.1 -port 3306 -work-type rollback \ -start-file mysql-bin.000006 -start-datetime "2024-09-23 19:00:00" -output-dir ./rollback_sql
- 执行回滚:
恢复后验证数据是否完整。mysql> source /path/to/rollback_sql/rollback.6.sql;
三、类似工具对比
-
binlog2sql(Python):
- 特点:业界广泛使用,功能基础(生成原始 SQL 和回滚 SQL),但解析速度较慢(1.1G binlog 解析需 50-65 分钟)。
- 适用场景:小规模数据恢复或简单审计需求。
-
MyFlash(C):
- 特点:生成反向二进制 binlog 文件,需通过
mysqlbinlog
转换为 SQL,功能单一但性能中等。 - 适用场景:需直接操作 binlog 文件的场景。
- 特点:生成反向二进制 binlog 文件,需通过
-
mysql2sqlite(Awk):
- 特点:专用于将 MySQL 数据迁移至 SQLite,支持调整语法兼容性(如处理
AUTO_INCREMENT
)。 - 适用场景:开发环境迁移或轻量级数据库转换。
- 特点:专用于将 MySQL 数据迁移至 SQLite,支持调整语法兼容性(如处理
对比总结:
工具 | 语言 | 性能 | 功能特点 | 适用场景 |
---|---|---|---|---|
my2sql | Go | 极快 | 闪回、统计、大事务分析 | 生产环境大数据量处理 |
binlog2sql | Python | 慢 | 基础闪回、标准 SQL | 小规模数据恢复 |
MyFlash | C | 中等 | 二进制回滚 | 需直接操作 binlog 文件 |
mysql2sqlite | Awk | 快 | MySQL 转 SQLite 语法兼容 | 数据迁移与轻量级部署 |
四、注意事项
- binlog 格式限制:闪回需
binlog_format=ROW
且binlog_row_image=FULL
。 - DDL 不可逆:无法恢复
DROP TABLE
等操作,需依赖备份。 - MySQL 8.0 兼容性:需配置
default_authentication_plugin=mysql_native_password
。 - 数据类型解析限制:部分复杂字段可能存在解析差异,需验证数据准确性。
通过合理选择工具,用户可根据数据量、恢复速度需求及功能复杂度优化运维流程。