离线分析、解析MySQL的Binlog日志的工具 - mysqlbinlog

pymysqlbinlog 是一个使用python编写 用来离线分析/解析mysqlbinlog的工具.

支持MySQL 5.7/8.x 的所有数据类型

主要功能:

  1. 分析binlog, 得到大事务信息, 表使用情况, DML使用情况等.
  2. 解析binlog, 解析binlog得到正向/回滚SQL.

特点

  1. 简单方便: 纯python3编写, 无依赖包
  2. 安全: 离线解析
  3. 功能多: 分析/解析binlog, 支持库/表/时间/pos/gtid等匹配
  4. 支持范围广: 支持mysql5.7/8.x 所有数据类型.
  5. 实用: 可做反向解析, 方便数据回滚.

下载

git clone git@github.com:ddcw/pymysqlbinlog.git

解析binlog

由于binlog可能没有记录数字类型的符号和字段名称, 且为离线解析, 所以SQL拼接可能并不能满足要求. 建议使用base64格式 (--base64)

正向解析

解析为SQL格式

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --sql

解析为base64格式

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --base64

解析为回滚SQL

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --base64 --rollback # 推荐
#python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --sql --rollback 
python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --base64 --rollback --verbose=4

数据过滤

时间过滤

维持事务完整性. 使用QUEYR_EVENT(即BEGIN的时间来匹配)

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --start-datetime="2024-05-04 11:14:15" --stop-datetime="2024-05-04 11:14:23" 

表名过滤

事务可能不完整

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --table='sbtest1'

库名过滤

事务可能不完整

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --schema='db1'

POS过滤

维持事务完整性. read_event的时候就匹配了POS信息

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --start-pos=780

GTID过滤

维持事务完整性. 若不匹配, 则进行下一个事务.

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --gtid 'b68e2434-cd30-11ec-b536-000c2980c11e'

SERVERID过滤

python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000040 --sql --serverid=3314

由于有些环境GTID_MODE=ON, 则需求使用 skip-gtids选项, 来生成如下信息

SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by ddcw pymysqlbinlog */ /*!*/;

分析binlog

可以分析多个BINLOG文件, 统计TABLE,EVENT,TRX三个维度的信息.

由于TRX太多了, 不方便展示, 故只取 TOP20 大事务. TABLE按照TOTAL_SIZE排序, 对于TABLE的COUNT表示行数.

(支持输出md格式.)

# 以TXT信息输出到屏幕(STDOUT)
python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --analyze

或者

# 以MARKDOWN格式输出到指定文件
python3 main.py /data/mysql_3314/mysqllog/binlog/m3314.000027 --analyze -o t20240505.md

若为非md文件, 则为txt格式. 可以直接将结果复制到excel等工具查看, 还可以画图使结果更直观.

标签: MySQL, Python

相关文章

使用Python3开发一个网站内链检查工具

1. 指定域名站点爬取与站内链接跟踪输入:指定一个域名(如https://www.lvtao.net),工具需要抓取该站点的所有页面内容。目标:递归跟踪并访问站点内的所有链接。只有同域名的站内链...

php+mysql中如何处理嵌套(子)事务并保持原子性一致

在PHP和MySQL中处理子事务并保持原子性一致性是一个复杂但非常重要的问题,尤其是在处理涉及多个数据库操作的业务逻辑时。以下是一些关键的解决方案、思路、技术要点和涉及的难点讲解。解决方案与思路...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件