我有 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 :
在您看到的结果中:
@x 是按顺序排列的表列
我不认为 GTID 是你的问题。
您可能正在使用基于行的二进制日志记录
要验证这一点,请运行以下操作之一:
您将看到
ROW
或MIXED
。查看 SQL 的唯一方法是,您必须将binlog_format设置 为STATEMENT
inmy.cnf
并重新启动 mysqld,因为 MySQL Documentation on Replication with Global Transaction Identifiers在第一段中说:不过,您不会看到带有给定二进制日志的实际 SQL。
试试这个工具binlog2sql,它将 bin 日志解析为更新/插入语句。
它的使用说明是中文的,但相信你可以从示例命令中明白这一点。
我更喜欢使用
因为:
“指定 --verbose 或 -v 两次以同时显示每列的数据类型和一些元数据。”
引用来源:man mysqlbinlog