SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 212244989
#260318 0:29:58 server id 1000000 end_log_pos 212245088 CRC32 0xe754fb89 Table_map: `minipos`.`es_print_record` mapped to number 7477
# at 212245088
#260318 0:29:58 server id 1000000 end_log_pos 212247727 CRC32 0x5661dada Update_rows: table id 7477 flags: STMT_END_F
BINLOG '
UlFBZElRQUtHMFVBSFNFQUcyRUFJQ0FnSUNEUXU5Qzd1OTI1eTZPc3U3YlRyYy9DdE02NTRzSFpJ
Q0FnSUNBS0cwVUFIU0VBQ2h0RkFCMGhBQW9iUlFBZElRQUtHMjA9IQAwMjYwMzE4MDAwMDAzNzkw
MDF0czE3NzM3NjQ5OTc3NzUBAAAAAQAwPwDmiZPljIXotLkgMiDlhYN4IDEgIOm7hOmHkeeCuOib
i3ggMSAg5LqU5b2p6YW45rGk54mb6IKJ6Z2ieCAxICACMTESMDI2MDMxODAwMDAwMzc5MDAxBQAw
MDAxIAAAAACZuWQHetraYVY=
'/*!*/;
# at 212247727
#260318 0:29:58 server id 1000000 end_log_pos 212247758 CRC32 0x19f21ede Xid = 531363364
COMMIT/*!*/;
# at 212247758
# at 212247838
#260318 0:29:58 server id 1000000 end_log_pos 212247925 CRC32 0xdfdaf4b3 Query thread_id=15756 exec_time=0 error_code=0
SET TIMESTAMP=1773764998/*!*/;
BEGIN
/*!*/;
# at 212247925
#260318 0:29:58 server id 1000000 end_log_pos 212248023 CRC32 0xc2742c9e Table_map: `minipos`.`comm_catering_materials` mapped to number 7488
# at 212248023
#260318 0:29:58 server id 1000000 end_log_pos 212256049 CRC32 0x92d18c3d Update_rows: table id 7488
# at 212256049
#260318 0:29:58 server id 1000000 end_log_pos 212264137 CRC32 0x676c8f32 Update_rows: table id 7488
# at 212264137
#260318 0:29:58 server id 1000000 end_log_pos 212272057 CRC32 0x5cded404 Update_rows: table id 7488
AACZuWNw8Zm5Y3DxAAKD6gQAAAAAAJEdQgAAAAAAAgAAACIbAAAAAAAAmbljcPGZuWNw8QACkOoE
AAAAAADuHUIAAAAAAAIAAAApGwAAAAAAAJm5Y3dsmbljd2wAApHqBAAAAAAA8R1CAAAAAAACAAAA
KRsAAAAAAACZuWN3kJm5Y3eQAAKS6gQAAAAAAOsdQgAAAAAAAgAAACkbAAAAAAAAmbljd5iZuWN3
mAACpeoEAAAAAACrDkIAAAAAAAIAAAAhGwAAAAAAAJm5Y3r3mbljevcAAqbqBAAAAAAAqw5CAAAA
AAACAAAAIhsAAAAAAACZuWN695m5Y3r3AIRMOZ8=
'/*!*/;
# at 216327481
#260318 0:29:59 server id 1000000 end_log_pos 216327575 CRC32 0x7719e67f Table_map: `minipos`.`comm_catering_materials_group` mapped to number 7497
# at 216327575
#260318 0:29:59 server id 1000000 end_log_pos 216327707 CRC32 0xea0ae85c Update_rows: table id 7497 flags: STMT_END_F
BINLOG '
h4G5aRNAQg8AXgAAAJfl5AwAAEkdAAAAAAEAB21pbmlwb3MAHWNvbW1fY2F0ZXJpbmdfbWF0ZXJp
YWxzX2dyb3VwAAgICA8DAxISAwSQAQAAQAEBAAID/P8Af+YZdw==
h4G5aR9AQg8AhAAAABvm5AwAAEkdAAAAAAEAAgAI//9AKAEAAAAAAADxGAAAAAAAAAwA6buY6K6k
5YiG57uEAAAAAAEAAACZuWQHdwAAAABAKAEAAAAAAADxGAAAAAAAAAwA6buY6K6k5YiG57uEAAAA
AAEAAACZuWQHdwEAAABc6Arq
'/*!*/;
# at 216327707
#260318 0:29:59 server id 1000000 end_log_pos 216327738 CRC32 0x820dd556 Xid = 531363360
COMMIT/*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
很多人会选这个:
❌ 错误
正确必须取:
原因:
binlog position 永远取 事件起点(event header)
而不是 SQL 行
end-position 为什么不是at 216327707 而是end_log_pos 216327738 后面这个216327738
在 binlog 中,每一个事件(Event)都有两个核心位置:
| # at 216327707 | 事件的起始位置,也就是这个事件在 binlog 文件里的偏移量 |
| end_log_pos 216327738 | 事件的结束位置,下一个事件的起始位置(逻辑上事件的“边界”) |
✅ 举例说明:
事件体从偏移 100 开始,到偏移 149 结束
下一个事件从 150 开始
事务结束的标志是 Xid / COMMIT event。
你日志里:
# at 216327707 → Xid 事件开始
end_log_pos 216327738 → Xid 事件结束
事务真正占用的 binlog 范围是:
⚠️ 注意:
如果你取 # at 216327707 作为 end-position,实际上会 少取最后几字节,在回放或回滚时可能导致 binlog 解析错误或事务不完整。
把 binlog 看成 “书页”:
一个事件跨越的页 = end_log_pos - # at
事务跨越的页 = 最后一个事件的 end_log_pos - 第一个事件的 # at
所以:
事务结束位置必须取最后一个事件的 end_log_pos,而不是 # at
事务开始:取第一个事件的 # at(通常是 上一个COMMIT之后的第一个#at)
事务结束:取最后一个事件的 end_log_pos(通常是 Xid / COMMIT event)
不要取最后事件的 # at,否则会少掉事件尾部,回放或闪回可能报错
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!