Mysql
如何解析 mysql bin 日誌文件中的語句(行/混合格式)
我有一個啟用二進制日誌的 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 的風險。
我最近處理過這個
Jun 02, 2015
:為什麼 binlog 只擷取職位May 15, 2015
:從 mysql binlog (GTID) 顯示 sql 語句你唯一能做的就是
# 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 語句