/lightning

lightning is a tool for binlog parsing. It can generate original SQL or flashback SQL.

Primary LanguageGoApache License 2.0Apache-2.0

简介

文档 | English Readme

lightning lightning 是由贝壳找房 DBA 团队开发和维护的一个 MySQL binlog 转换工具。该工具可以将 MySQL ROW 格式的 binlog 转换为想要的 SQL,如:原始 SQL,闪回 SQL等。也可以对 binlog 进行统计分析,用于数据库异常分析。甚至可以通过定制 lua 插件进行二次开发,发挥无限的想象力。

应用

  • 数据修改错误,需要快速回滚 (闪回)
    • DELETE, UPDATE 未指定 WHERE 条件
    • UPDATE SET 误用 AND 连接
  • 数据异常, 从 binlog 中找特定表某些数据是什么时间修的
  • 业务流量异常或从库同步延迟,需要统计排查是哪些表在频繁更新
  • 需要把指定表,指定时间的更新提供给开发定位服务异常问题
  • 主从切换后新主库丢失数据的修复
  • 从 binlog 生成标准 SQL,带来的衍生功能
  • 找出某个时间点数据库是否有大事务 (Size) 或者长事务 (Time)

优点

  • 跨平台支持,二进制文件即下即用,无其他依赖。
  • 支持 lua 定制化插件,发挥无限的想象力,二次开发周期短。
  • 支持从 SQL 文件加载库表信息,不必连接 MySQL 便于历史变更恢复。
  • SQL 进行多行合并,相比 mysqlbinlog ROW 格式,更好过滤。

安装

二进制安装

lightning 使用 Go 1.11+ 开发,可以直接下载编译好的二进制文件在命令行下使用。由于 Go 原生对跨平台支持较好,在 Windows, Linux, Mac 下均可使用。

下载地址

源码安装

go get -d github.com/LianjiaTech/lightning
cd ${PATH_TO_SOURCE}/lightning # 进入源码路径,PATH_TO_SOURCE 需要人为具体指定。
make

测试示例

常用命令

直接读取文件生成回滚语句

lightning -no-defaults \
-plugin flashback \
-start-datetime "2019-01-01 00:00:00" \
-stop-datetime "2019-01-01 00:01:00" \
-event-types delete,update \
-tables test.tb \
-schema-file schema.sql \
-binlog-file binlog.0000001 > flashback.sql

使用 Binlog Dump 方式读取日志生成回滚语句

cat > master.info
master_host: 127.0.0.1
master_user: root
master_password: ****** 
master_port: 3306
master_log_file: binlog.000002
master_log_pos: 4
<ctrl>+D

lightning -no-defaults \
-plugin flashback \
-start-datetime "2019-01-01 00:00:00" \
-stop-datetime "2019-01-01 00:01:00" \
-event-types delete,update \
-tables test.tb \
-master-info master.info > flashback.sql

配置

lightning 使用 YAML 格式的配置文件。使用 -config 参数指定配置文件路径,如不指定默认按 /etc/lightning.yaml -> ./etc/lightning.yaml -> ./lightning.yaml 的顺序加载配置文件。如果不想使用默认路径下的配置文件还可以通过 -no-defaults 参数屏蔽所有默认配置文件。

限制/局限

  • 仅测试了 v4 版本 (MySQL 5.1+) 的 binlog,更早版本未做测试。
  • BINLOG_FORMAT = ROW
  • 参数 BINLOG_ROW_IMAGE 必须为 FULL,暂不支持 MINIMAL
  • 由于添加了更多的处理逻辑,解析速度不如 mysqlbinlog 快
  • 当 binlog 中的 DDL 语句变更表结构时,lightning 中的表结构原数据并不随之改变(TODO)

沟通交流

  • 常见问题(FAQ)
  • 欢迎通过 Github Issues 提交问题报告与建议
  • QQ 群: 573877257

QQ

License

Apache License 2.0