我有mysql binlogs通过GTID进行复制。

我试图显示执行的update/insert语句,如下所示:

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复制的格式/配置以及在哪里查找它。..

有帮助吗?

解决方案

似乎必须添加选项 - 鼠标:

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_formatSTATEMENTmy.cnf 并重新启动mysqld,因为MySQL文档上 使用全局事务标识符进行复制 在第一段中说:

您可以将基于语句的复制或基于行的复制与Gtid一起使用(请参阅第17.1.2节"复制格式");但是,为了获得最佳效果,我们建议您使用基于行的格式。

尽管如此,您不会看到带有给定二进制日志的实际SQL。

尝试这个工具 binlog2sql ,它解析bin日志以更新/插入语句。
它的使用说明是中文,但我相信您可以从示例命令获取该点。

我更喜欢使用

mysqlbinlog -v --base64-output=DECODE-ROWS /files/
.

因为:

  • “如果给出了no --base64-输出选项,则效果与--base64-output= auto”
  • 相同
  • “--base64-output=解码 - 行和 - verbose的组合提供了一种简便的方法,即仅作为SQL语句查看行事件”(它捕捉到Binlog语句)

“指定两次verbose或-v,也为每列显示数据类型和某些元数据。”

引号来源:mysqlbinlog

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top