mysql-bin分析_shell脚本 mysql-binlog分析

本文档介绍了如何使用shell脚本进行MySQL binlog分析,包括统计业务表DML操作次数、按表排序、binlog转SQL等功能。通过设置参数,可以实现并行分析、指定显示内容和排序方式,以及按时间或位置范围转换binlog为SQL语句。分析结果将保存在指定目录下的res文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

## 一.简介

介绍

分析binlog工具,现有功能:

1. 基于业务表分析统计各个表的dml的次数。

2. 各个业务表的最后访问时间。

3. 各dml总的次数。

4. 该binlog的事务总数。

5. 基于业务表的binlog to sql。

6. 其他功能敬请期待。

## 二.使用

适用:centos6+

语言:中文

注意:请先写一个脚本来启动java等程序

1.下载

`git clone https://gitee.com/mo-shan/analysis_binlog`

`cd analysis_binlog`

2.更改路径,将这里的mysqlbinlog_path改成mysqlbinlog工具的绝对路径,否则可能会因版本太低导致错误

`sed -i 's#^mysqlbinlog=.*#mysqlbinlog=\"/mysqlbinlog_path\"#g' bin/analysis_binlog`

将这里的analysis_binlog_path改成analysis_binlog的家目录的绝对路径

`sed -i 's#^work_dir=.*#work_dir=\"/analysis_binlog_path\"#g' bin/analysis_binlog`

为analysis_binlog配置环境变量(选做)

`chmod +x bin/analysis_binlog`

`echo "export PATH=$(pwd)/bin:${PATH}" >> ${HOME}/.bashrc`

3.查看帮助

`bash analysis_binlog -h`

### 使用测试-1

1.统计业务表的dml情况

根据需求执行

- -bfile: 指定binlog文件, 支持多个文件并行分析, 多个文件用逗号相隔, 需要并行分析时请结合-w参数使用

- -w : 指定并行数, 当需要分析多个binlog文件时该参数有效, 默认是1

- -t : 指定显示结果的格式/内容, 供选选项有”detail|simple”. 当指定detail的时候结果较为详细, 会打印详细的分析过程, 消耗时间也不直观, simple只做了统计工作

- -s : 指定排序规则, 供选选项有”insert|update|delete”. 默认会把统计结果做一个排序, 按照表的维度统计出insert update delete的次数, 并按照次数大小排序(默认insert)

注: 其他参数使用请参见帮助手册 bash analysis_binlog -h

2.配置了环境变量使用

`analysis_binlog -bfile=/data/mysql/binlog/3306/mysql-bin.000798,/data/mysql/binlog/3306/mysql-bin.000799 -w=2 -t=simple -s=update`

未配置环境变量使用

`bash bin/analysis_binlog -bfile=/data/mysql/binlog/3306/mysql-bin.000798,/data/mysql/binlog/3306/mysql-bin.000799 -w=2 -t=simple -s=update`

3.结果查询

分析完毕会在analysis_binlog家目录下的res目录下保存一个[binlog_file_name.res]文件,使用文本工具打开即可, 建议使用cat, tail, more, 如下结果展示, 会按照表的维度做个统计, 然后按照update的次数排序, Last Time表示该表的最后一次操作

`cat mysql-bin.000798.res`

### 使用测试-2

1.binlog to sql

根据需求执行

- —binlog2sql : 表示将binlog分析成sql。

- -sw : 表示将结果按照业务表的维度保存,如果是file则将所有分析结果都保存在一个文件。

- —start-datetime : 开始时间。具体使用请参照mysqlbinlog工具的—start-datetime参数的使用

- —stop-datetime : 结束时间。具体使用,请参照mysqlbinlog工具的—stop-datetime参数的使用

- —start-position : 开始的pos值。具体使用,请参照mysqlbinlog工具的—start-position参数的使用

- —stop-position : 结束的pos值。具体使用,请参照mysqlbinlog工具的—stop-position参数的使用

注: 其他参数使用请参见帮助手册 bash analysis_binlog -h

2.执行

`bash bin/analysis_binlog -bfile=/data/mysql/binlog/3306/mysql-bin.000808 --binlog2sql -sw=table --start-datetime="2019-04-21 9:27:10" --stop-datetime="2019-04-22 10:00:00" --start-postion=1510151 --stop-position=1512137`

3.结果查询

分析完毕会在analysis_binlog家目录下的res目录下保存一个[binlog_file_name_to_sql.res]文件,使用文本工具打开即可, 如果【—save-way=table】,则会在res目录下创建【table】目录,该目录下会出现binlog_file_db.table.res的文件,这些文件就是保存了这个该binlog分析出来的sql语句, 如下结果展示

`cat res/mysql-bin.000808_to_sql.res |more`

### 提示

v_1.1版本引入新参数—record-type or -rt

该参数表示以什么方式统计,可选的方式是两种,一是统计sql的个数,二统计事务的个数,默认是统计sql的个数。

如:某表有十行记录,现在执行delete from t; 如果binlog是row格式,这时候记录到binlog会是十个delete语句,但是是一个事务。这时候这个参数就起作用了。用户可以按照需求并参考使用手册使用该参数。但是需要注意的是如果一个事务里面存在多种dml,比如begin;insert into t select 1;update t2 set c=c+1;commit;对于这样的事务,会将该事务记到t2的update操作,不会记录到t的insert操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值