當(dāng)前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

shell腳本 mysql-binlog分析
2021-12-13 17:50:10

一.簡(jiǎn)介

介紹
分析binlog工具,現(xiàn)有功能:

  1. 基于業(yè)務(wù)表分析統(tǒng)計(jì)各個(gè)表的dml的次數(shù)。
  2. 各個(gè)業(yè)務(wù)表的最后訪問時(shí)間。
  3. 各dml總的次數(shù)。
  4. 該binlog的事務(wù)總數(shù)。
  5. 基于業(yè)務(wù)表的binlog to sql。
  6. 其他功能敬請(qǐng)期待。

二.使用

適用:centos6+
語言:中文
注意:請(qǐng)先寫一個(gè)腳本來啟動(dòng)java等程序

1.下載
git clone https://gitee.com/mo-shan/analysis_binlog
cd analysis_binlog

2.更改路徑,將這里的mysqlbinlog_path改成mysqlbinlog工具的絕對(duì)路徑,否則可能會(huì)因版本太低導(dǎo)致錯(cuò)誤
sed -i 's#^mysqlbinlog=.*#mysqlbinlog="/mysqlbinlog_path"#g' bin/analysis_binlog

將這里的analysis_binlog_path改成analysis_binlog的家目錄的絕對(duì)路徑
sed -i 's#^work_dir=.*#work_dir="/analysis_binlog_path"#g' bin/analysis_binlog

為analysis_binlog配置環(huán)境變量(選做)
chmod +x bin/analysis_binlog
echo "export PATH=$(pwd)/bin:${PATH}" >> ${HOME}/.bashrc

3.查看幫助
bash analysis_binlog -h

使用測(cè)試-1

1.統(tǒng)計(jì)業(yè)務(wù)表的dml情況
根據(jù)需求執(zhí)行

  • -bfile: 指定binlog文件, 支持多個(gè)文件并行分析, 多個(gè)文件用逗號(hào)相隔, 需要并行分析時(shí)請(qǐng)結(jié)合-w參數(shù)使用
  • -w : 指定并行數(shù), 當(dāng)需要分析多個(gè)binlog文件時(shí)該參數(shù)有效, 默認(rèn)是1
  • -t : 指定顯示結(jié)果的格式/內(nèi)容, 供選選項(xiàng)有”detail|simple”. 當(dāng)指定detail的時(shí)候結(jié)果較為詳細(xì), 會(huì)打印詳細(xì)的分析過程, 消耗時(shí)間也不直觀, simple只做了統(tǒng)計(jì)工作
  • -s : 指定排序規(guī)則, 供選選項(xiàng)有”insert|update|delete”. 默認(rèn)會(huì)把統(tǒng)計(jì)結(jié)果做一個(gè)排序, 按照表的維度統(tǒng)計(jì)出insert update delete的次數(shù), 并按照次數(shù)大小排序(默認(rèn)insert)

注: 其他參數(shù)使用請(qǐng)參見幫助手冊(cè) bash analysis_binlog -h

2.配置了環(huán)境變量使用
analysis_binlog -bfile=/data/mysql/binlog/3306/mysql-bin.000798,/data/mysql/binlog/3306/mysql-bin.000799 -w=2 -t=simple -s=update

未配置環(huán)境變量使用
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.結(jié)果查詢
分析完畢會(huì)在analysis_binlog家目錄下的res目錄下保存一個(gè)[binlog_file_name.res]文件,使用文本工具打開即可, 建議使用cat, tail, more, 如下結(jié)果展示, 會(huì)按照表的維度做個(gè)統(tǒng)計(jì), 然后按照update的次數(shù)排序, Last Time表示該表的最后一次操作
cat mysql-bin.000798.res

使用測(cè)試-2

1.binlog to sql
根據(jù)需求執(zhí)行

  • —binlog2sql : 表示將binlog分析成sql。
  • -sw : 表示將結(jié)果按照業(yè)務(wù)表的維度保存,如果是file則將所有分析結(jié)果都保存在一個(gè)文件。
  • —start-datetime : 開始時(shí)間。具體使用請(qǐng)參照mysqlbinlog工具的—start-datetime參數(shù)的使用
  • —stop-datetime : 結(jié)束時(shí)間。具體使用,請(qǐng)參照mysqlbinlog工具的—stop-datetime參數(shù)的使用
  • —start-position : 開始的pos值。具體使用,請(qǐng)參照mysqlbinlog工具的—start-position參數(shù)的使用
  • —stop-position : 結(jié)束的pos值。具體使用,請(qǐng)參照mysqlbinlog工具的—stop-position參數(shù)的使用

注: 其他參數(shù)使用請(qǐng)參見幫助手冊(cè) bash analysis_binlog -h

2.執(zhí)行
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.結(jié)果查詢
分析完畢會(huì)在analysis_binlog家目錄下的res目錄下保存一個(gè)[binlog_file_name_to_sql.res]文件,使用文本工具打開即可, 如果【—save-way=table】,則會(huì)在res目錄下創(chuàng)建【table】目錄,該目錄下會(huì)出現(xiàn)binlog_file_db.table.res的文件,這些文件就是保存了這個(gè)該binlog分析出來的sql語句, 如下結(jié)果展示
cat res/mysql-bin.000808_to_sql.res |more

提示

v_1.1版本引入新參數(shù)—record-type or -rt

該參數(shù)表示以什么方式統(tǒng)計(jì),可選的方式是兩種,一是統(tǒng)計(jì)sql的個(gè)數(shù),二統(tǒng)計(jì)事務(wù)的個(gè)數(shù),默認(rèn)是統(tǒng)計(jì)sql的個(gè)數(shù)。

如:某表有十行記錄,現(xiàn)在執(zhí)行delete from t; 如果binlog是row格式,這時(shí)候記錄到binlog會(huì)是十個(gè)delete語句,但是是一個(gè)事務(wù)。這時(shí)候這個(gè)參數(shù)就起作用了。用戶可以按照需求并參考使用手冊(cè)使用該參數(shù)。但是需要注意的是如果一個(gè)事務(wù)里面存在多種dml,比如begin;insert into t select 1;update t2 set c=c+1;commit;對(duì)于這樣的事務(wù),會(huì)將該事務(wù)記到t2的update操作,不會(huì)記錄到t的insert操作。

本文摘自 :https://www.cnblogs.com/

開通會(huì)員,享受整站包年服務(wù)立即開通 >