Analysisbinlog 分析及回滾操作介紹
Analysisbinlog是我在學習binlog event結構及存儲的時候,為了更深入理解寫的一個對binlog的分析工具,基於python2.7開發,相較於mysqlbinlog工具顯示簡化很多,可以分析可以對row數據生成回滾語句,可定位組合有下面幾個:
Thread_id
Position範圍
時間範圍
GTID
Position 範圍 + thread_id/gtid
時間範圍 + thread_id/gtid
顯示效果如圖:
精簡了對我們沒多大用的數據,只顯示執行語句、GTID、POSITION、thread_id、庫表名及對應行數據等記錄,如一個事務修改多條記錄,那麽這幾條變更的記錄都會在GTID和XID中間顯示,行數據內容順序和字段順序相對應
我們DBA在工作中有可能會遇到應用發布時出錯需要回滾數據或者眼花錯刪數據這種奇葩情況,這工具也可以對binlog生成回滾語句,打印出的sql語句相對binlog是倒敘的,再也不用怕事務順序影響回滾了(哈哈....),生成回滾語句的方式也有幾個可供選擇:
全文件生成回滾語句(需要回滾全文件的可以直接刪庫跑路了)
Position範圍
GTID
Position 範圍 + GTID/thread_id
顯示效果如圖:
生成的回滾語句上分會有對應的GTID號,可以利用它對生成的語句進行校驗,我對update_rows_event和insert_rows_event數據的表結構做了判斷,如果有primary key字段就使用primary key字段作為where條件,減少了數據內容。
下載地址:https://github.com/wwwbjqcom/scripts.git
使用幫助:
下載到本地後在scripts文件夾裏有個Analysisbinlog.py的文件,先安裝python的MySQLdb模塊,生成回滾語句需要獲取表結構時要用到,先添加可執行權限
> chmod +x Analysisbinlog.py
> ./Analysisbinlog.py -h #顯示所有參數項,如下圖
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 #只添加文件參數將分析binlog整個文件內容
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 --start-position 2221 --stop-position 2786 #打印某個position範圍內的內容
其余參數組合可以自己測試,如果positon和datetime範圍都有指定,優先position範圍分析
由於生成回滾語句需要提取表結構,所以必須提供連接數據庫的參數項
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 -r --user ‘root‘ --passwd ‘root‘ --host ‘localhost‘ --port 3306
-r : 打開回滾模式
後面的--user、--passwd、--host、--port都是必須項,下圖我操作的是對position範圍生成回滾語句
該工具我沒有對set、bit兩個字段類型做分析,因為我覺得這兩個字段使用的幾率很小,如果有需求的話可以聯系做添加,如果自己能添加最好,可以深入的對binlog及數據存儲做了解,可以參考一下我之前發的<binlog詳細解讀>,還有一點我在取結構時沒有取enum字段的值,所以有該字段類型的回滾語句會有問題,binlog中是存儲的索引值,並不是enum設置的值,這個需註意,在使用該工具的時候推薦使用position範圍做組合,可以提升定位效率
ps: mysql技術交流qq群479472450,我個人公眾號也會發一些研究整理的文章,多多關註
本文出自 “小菜鳥DBA” 博客,請務必保留此出處http://xiaozhong991.blog.51cto.com/2354914/1959716
Analysisbinlog 分析及回滾操作介紹