我在每个 bin 日志文件中发现了近 13830 个更新行,如下所示。但每个日志只有几个更新查询。
此命令仅显示 85 个更新查询
mysqlbinlog mysql-bin.005400 | grep -i 'Update' | grep -i '#Q> UPDATE' | wc -l
对于下面的命令,显示 13830 行,如下面的输出。
mysqlbinlog mysql-bin.005400 | grep -i 'Update' | grep -i 'Update_rows: table id' | wc -l
日志输出:
服务器 ID 1 end_log_pos 108614456 CRC32 0xfe8e56d5 Update_rows:表 ID 49992010
这里的表id是什么?
为什么上面的输出会显示这么多?
如何根据id找到特定的表?
如果二进制日志格式是ROW,则TABLE_MAP_EVENT事件将在ROWS_EVENT(包含更新/插入或删除信息)之前发送。 TABLE_MAP_EVENT 包含有关表 id 和名称的信息。
示例:
INSERT INTO test VALUES (1,2)
二进制日志显示:
#240713 8:46:59 server id 1 end_log_pos 0 CRC32 0x6f2c3407 Table_map: `test`.`t1` mapped to number 22
# at 785
#240713 8:46:59 server id 1 end_log_pos 0 CRC32 0x221bb533 Write_rows: table id 22 flags: STMT_END_F
BINLOG '
4yKSZhMBAAAALQAAAAAAAAAAABYAAAAAAAEABHRlc3QAAnQxAAEDAAEHNCxv
4yKSZhcBAAAAKwAAAAAAAAAAABYAAAAAAAEAAQH+AQAAAP4CAAAAM7UbIg==
'/*!*/;
# Number of rows: 2