Mysql
顯示來自 mysql binlog (GTID) 的 sql 語句
我有 mysql binlogs 用於通過 GTID 進行複制。
我正在嘗試顯示執行的更新/插入語句,如下所示:
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
但我看到的都是這樣的,沒有更新或插入 stmt 的痕跡:
SET TIMESTAMP=1431681617/*!*/; BEGIN /*!*/; # at 746987321 # at 746987392 # at 746987484 #150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767 COMMIT/*!*/; # at 746987515 #150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes] SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/; # at 746987563 #150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
我不確定 GTID 複製的格式/配置以及在哪裡尋找它……
似乎必須添加選項 –verbose :
mysqlbinlog --base64-output=AUTO --verbose mysql-bin.000005
在您看到的結果中:
### UPDATE `customer` ### WHERE ### @1=388442 ### @2=382023 ### @3='2015:05:30' ### @4='2015:06:02' ### @5=3 ### @6=1 ### @7=0
@x 是按順序排列的表列
我不認為 GTID 是你的問題。
您可能正在使用基於行的二進制日誌記錄
要驗證這一點,請執行以下操作之一:
SELECT @@global.binlog_format; SHOW GLOBAL VARIABLES LIKE 'binlog_format'; SELECT variable_value FROM information_schema.global_variables WHERE variable_name='binlog_format';
您將看到
ROW
或MIXED
。查看 SQL 的唯一方法是,您必須將binlog_format設置 為STATEMENT
inmy.cnf
並重新啟動 mysqld,因為 MySQL Documentation on Replication with Global Transaction Identifiers在第一段中說:您可以將基於語句或基於行的複制與 GTID 一起使用(請參閱第 17.1.2 節,“複製格式”);但是,為了獲得最佳結果,我們建議您使用基於行的格式。
不過,您不會看到帶有給定二進制日誌的實際 SQL。