binlog2sql是一個開源的Python開發的MySQL Binlog解析工具,能夠將Binlog解析為原始的SQL,也支持將Binlog解析為回滾的SQL,以便做數據恢復。
主要功能:
將Binlog解析為SQL語句將Binlog解析為回滾的SQL語句開源地址:
github.com/danfengcao/binlog2sql
支持的版本:
Python 2.7, 3.4+MySQL 5.6, 5.7外部依賴包:
下載源碼,打開源碼目錄中的requirements.txt文件,即可看到依賴的外部包,如下:
PyMySQL==0.7.11wheel==0.29.0mysql-replication==0.13通過執行如下命令,安裝外部依賴包。
shell> pip install -r requirements.txt
MySQL Server的配置:
MySQL的配置,必須滿足以下要求,才能正常使用binlog2sql工具。開啟binlog,binlog格式必須為ROW,且binlog_row_image必須為full。
binlog2sql參數選項:
mysql連接選項,與mysql客戶端的選項一致
-h host-P port-u user-p password解析模式
--stop-never 持續解析binlog。可選。默認False,同步至執行命令時最新的binlog位置。-K, --no-primary-key 對INSERT語句去除主鍵。可選。默認False-B, --flashback 生成回滾SQL,可解析大文件,不受內存限制。可選。默認False。與stop-never或no-primary-key不能同時添加。--back-interval -B模式下,每列印一千行回滾SQL,加一句SLEEP多少秒,如不想加SLEEP,請設為0。可選。默認1.0。解析範圍控制
--start-file 起始解析文件,只需文件名,無需全路徑 。必須。--start-position/--start-pos 起始解析位置。可選。默認為start-file的起始位置。--stop-file/--end-file 終止解析文件。可選。默認為start-file同一個文件。若解析模式為stop-never,此選項失效。--stop-position/--end-pos 終止解析位置。可選。默認為stop-file的最末位置;若解析模式為stop-never,此選項失效。--start-datetime 起始解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。--stop-datetime 終止解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。對象過濾
-d, --databases 只解析目標db的sql,多個庫用空格隔開,如-d db1 db2。可選。默認為空。-t, --tables 只解析目標table的sql,多張表用空格隔開,如-t tbl1 tbl2。可選。默認為空。--only-dml 只解析dml,忽略ddl。可選。默認False。--sql-type 只解析指定類型,支持INSERT, UPDATE, DELETE。多個類型用空格隔開,如--sql-type INSERT DELETE。可選。默認為增刪改都解析。用了此參數但沒填任何類型,則三者都不解析。使用案例:
案例一:解析binlog,生成正向的sql語句。
在沒有加 --only-dml 參數的情況下,會連ddl語句也解析出來,加上 --only-dml 參數,看到只解析dml語句。
案例二:解析binlog,生成回滾的sql語句。
回滾sql是正向sql的反轉,insert 100, insert 1, 反轉後,變為 delete 1, delete 100。
總結:
binlog2sql 安裝使用方便,源碼文件不多,也不大,但是功能非常強大。需要注意的是,在使用binlog2sql時,mysql server必須開啟,離線模式下不能解析。