显示来自mysql binlog(GTID)的sql语句
-
26-09-2020 - |
题
我有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';
你要么会看到 ROW
或 MIXED
.查看SQL的唯一方法,您必须设置 binlog_format 到 STATEMENT
在 my.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
不隶属于 dba.stackexchange