Mysql

顯示來自 mysql binlog (GTID) 的 sql 語句

  • April 12, 2019

我有 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';

您將看到ROWMIXED。查看 SQL 的唯一方法是,您必須將binlog_format設置 為STATEMENTinmy.cnf並重新啟動 mysqld,因為 MySQL Documentation on Replication with Global Transaction Identifiers在第一段中說:

您可以將基於語句或基於行的複制與 GTID 一起使用(請參閱第 17.1.2 節,“複製格式”);但是,為了獲得最佳結果,我們建議您使用基於行的格式。

不過,您不會看到帶有給定二進制日誌的實際 SQL。

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