Repository navigation
v0.26.1
English
BinlogViz v0.26.1 Release Notes
Release date: 2026-10-17
Overview
v0.26.1 is a patch release. It fixes flashback --conflict guard for a primary key that was moved and then reused, the last open item of #270. There are no breaking changes: exit codes, plan_version 2, analyze output and the default --conflict refuse behaviour are the same as v0.26.0.
Fixed
--conflict guardand a reused primary key (#270, #299): when an UPDATE moved a row's primary key (for exampleid 1 → 101) and a later row reused the old key1, the guard script's move-back failed withERROR 1062and stopped the block. The move-back is now guarded like any other row changed later: it changes no row, and the rest of the block applies. The guard script header explains this.- The default
--conflict refusestill exits 7 for this case, so nothing changes unless you chose--conflict guard.
Verification
BinlogQA's pre-release QA on main 5a7b2e84 passed, against the v0.26.0 tag.
- Live MySQL 8.0.36: the classic move-and-reuse case refuses with exit 7 and the guard script applies with the expected rows; a composite primary key with a partial key move,
_cicase-only undo,_cireuse and a chain with a reused key all apply without 1062. - Against v0.26.0: analyze output, plain flashback SQL and stderr, and the refuse path are byte-identical. Guard scripts differ only in the new header comment. The 67-case exit-code matrix differs only in that guard output.
- #293 compression bombs still exit 5 with empty stdout at memory in line with v0.26.0. Workflow smoke passes.
- CI and
go test ./...pass.
Compatibility
- No breaking changes.
plan_versionstays 2,report_versionstays3, and exit codes, snapshots, artifact names and supported platforms are unchanged from v0.26.0. flashbacknever connects to MySQL. Review the script, test it, and apply it in one new session on the primary withsql_log_bin=1, with the script header.
Known gaps
See docs/concept/limitations.md for the flashback limitations carried over from earlier releases.
中文
BinlogViz v0.26.1 发布说明
发布日期:2026-10-17
概述
v0.26.1 是补丁版本,修复 flashback --conflict guard 在主键被修改后又被重新使用时的问题,这是 #270 最后一个未解决的问题。没有不兼容变更:退出码、plan_version 2、analyze 输出以及默认的 --conflict refuse 行为都与 v0.26.0 相同。
修复
--conflict guard与被重新使用的主键(#270、#299):如果一个 UPDATE 修改了某行的主键(例如id 1 → 101),之后又有一行重新使用了旧主键1,guard 脚本中改回主键的语句会报ERROR 1062并中断整个块。现在改回主键的语句和其他后来被修改过的行一样受 guard 保护:它不改变任何行,块中其余语句照常执行。guard 脚本头部有相应说明。- 默认的
--conflict refuse遇到这种情况仍然以退出码 7 拒绝,所以只有选择了--conflict guard时行为才会变化。
验证
BinlogQA 对 main 5a7b2e84 的发布前 QA 通过,以 v0.26.0 tag 为基准。
- 真实 MySQL 8.0.36:经典的主键修改后被重新使用的场景以退出码 7 拒绝,guard 脚本执行后结果符合预期;复合主键部分修改、
_ci仅大小写不同的回滚、_ci重新使用以及带重新使用主键的修改链,都能执行且不报 1062。 - 与 v0.26.0 对比:analyze 输出、普通 flashback 的 SQL 和 stderr、refuse 路径都逐字节一致。guard 脚本唯一的差异是新增的头部注释。67 项退出码矩阵唯一的差异也是这份 guard 输出。
- #293 的压缩炸弹仍然以退出码 5 结束,stdout 为空,内存与 v0.26.0 持平。workflow 冒烟测试通过。
- CI 和
go test ./...通过。
兼容性
- 没有不兼容变更。
plan_version仍为 2,report_version仍为3,退出码、快照、产物名称和支持的平台与 v0.26.0 相同。 flashback从不连接 MySQL。请先审阅并测试脚本,再带着脚本头,在主库上用一个新会话、sql_log_bin=1执行。
已知问题
更早版本遗留的 flashback 限制见 docs/concept/limitations.md。