Giter Site home page Giter Site logo

lianjiatech / lightning Goto Github PK

View Code? Open in Web Editor NEW
73.0 19.0 23.0 3.5 MB

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

License: Apache License 2.0

Makefile 2.65% Go 81.73% Shell 1.50% Lua 6.12% Python 8.01%
binlog flashback rollback mysql

lightning's Introduction

简介

文档 | 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

lightning's People

Contributors

martianzhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lightning's Issues

源码安装没有可执行文件

使用文档里的make语句,并没有看到可执行文件,是哪里配错了吗?

[root@10-255-0-194 lightning]# l
total 44
drwxr-xr-x 12 root root   255 Aug  6 21:53 ./
drwxr-xr-x  3 root root    23 Aug  6 17:22 ../
drwxr-xr-x  3 root root   163 Aug  6 21:53 common/
drwxr-xr-x  2 root root   214 Aug  6 17:23 doc/
drwxr-xr-x  2 root root    76 Aug  6 17:23 etc/
drwxr-xr-x  2 root root    98 Aug  6 17:23 event/
-rwxr-xr-x  1 root root   813 Aug  6 17:23 genver.sh*
drwxr-xr-x  7 root root   147 Aug  6 17:23 .git/
-rw-r--r--  1 root root    87 Aug  6 17:23 .gitignore
-rw-r--r--  1 root root 11358 Aug  6 17:23 LICENSE
-rw-r--r--  1 root root  4218 Aug  6 17:23 Makefile
drwxr-xr-x  2 root root   152 Aug  6 17:23 plugin/
-rw-r--r--  1 root root  3417 Aug  6 17:23 README_EN.md
-rw-r--r--  1 root root  4214 Aug  6 17:23 README.md
drwxr-xr-x  3 root root   267 Aug  6 17:23 rebuild/
drwxr-xr-x  2 root root     6 Aug  6 19:53 release/
drwxr-xr-x  2 root root    61 Aug  6 17:23 test/
drwxr-xr-x  8 root root   138 Aug  6 17:23 vendor/
-rw-r--r--  1 root root     6 Aug  6 21:57 VERSION
[root@10-255-0-194 lightning]# make
Building ...
build Success!
[root@10-255-0-194 lightning]# ls -al /root/go/
total 0
drwxr-xr-x  4 root root  28 Aug  6 17:36 .
dr-xr-x---. 7 root root 200 Aug  6 21:53 ..
drwxr-xr-x  3 root root  25 Aug  6 17:36 pkg
drwxr-xr-x  3 root root  24 Aug  6 17:22 src
[root@10-255-0-194 lightning]# pwd
/root/go/src/github.com/LianjiaTech/lightning

恢复的sql,主键id变成科学计数

命令:
./lightning -user root -password XXXX -host 127.0.0.1 -port 3306
-no-defaults
-event-types delete
-binlog-file mysql-bin.000017 > flashback.sql

结果:
DELETE FROM lfcp_jsnd_web.lfcp_form_group_page_config WHERE id = 9.897767764966606e+16 LIMIT 1;
DELETE FROM lfcp_jsnd_web.lfcp_form_group_page_config WHERE id = 9.897767764966605e+16 LIMIT 1;

输出的rollback文件中的SQL没有按照时间逆序输出?

./lightning -no-defaults \ -plugin flashback \ -start-datetime "2022-06-28 16:30:00" \ -stop-datetime "2022-06-28 17:35:00" \ -event-types update \ -tables a.b \ -master-info ./master.info > flashback.sql
使用lightning生成的rollback文件,SQL好像还是按照时间顺序排列的,如果要用来进行数据恢复的话,需要将文件内容逆向输出一下:
tac flashback.sql >flashback_r.sql

请问是否可以直接输出成时间逆序的SQL文件,可以直接拿来回滚使用?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.