Mysql

如何解析 mysql bin 日誌文件中的語句(行/混合格式)

  • June 5, 2017

我有一個啟用二進制日誌的 mysql 數據庫。不幸的是,客戶端執行了一條語句,結果是錯誤的。由於許多記錄已被“影響”,我想首先解析 bin-log 以獲取該時間段的數據更改語句。然後我們也許可以開始收拾殘局。

我用過了:

mysqlbinlog -v --base64-output=decode-rows --start-datetime="2015-06-26 08:30:00" --stop-datetime="2015-06-26 09:30:00" data/mysql-bin.000005 > C:\temp\binlog.txt 

輸出相當嚇人。我希望能夠解析出任何 INSERT、UPDATE 或 DELETE 語句的策略。請記住,我處於混合模式。

謝謝你。

當你有binlog_format=MIXED一些語句時會顯示為實際的 SQL。其他語句可能會像這樣被混淆:

### INSERT INTO `sanma`.`response`
### SET
###   @1=743096223
###   @2=0
###   @3='IR'
###   @4='UnderProcess'
###   @5=2015-05-29 20:51:34
###   @6=743053329
###   @7=NULL
###   @8=NULL
###   @9='758484829'
###   @10=1432912893
###   @11=758484829
###   @12='UnderProcess'
###   @13=0
###   @14=NULL
###   @15=NULL
###   @16=NULL
###   @17=NULL
# at 20535714
#150529 20:51:33 server id 71  end_log_pos 20535741     Xid = 84151212
COMMIT/*!*/;

INSERT ... SET由於使用了語法,因此可以看到該語句。

其他陳述可能會被混淆得面目全非。這是使用 MIXED 或 ROW 的風險。

我最近處理過這個

你唯一能做的就是

# Look for INSERT, UPDATE, DELETE statements
mysqlbinlog ... > statements.sql
grep -i "^[IUD][NPE][SDL][EA][RT][TE]"     statements.sql  > dml.sql
grep -i "^### [IUD][NPE][SDL][EA][RT][TE]" statements.sql >> dml.sql

當 mysqld 間歇性地切換到 binlog_format ROW 時,不能保證您會捕捉到語句形式的每一個變化。

請使用此工具解析 SQL 語句

https://github.com/danfengcao/binlog2sql

引用自:https://dba.stackexchange.com/questions/105269