gh-ost v1.1.11 支持 MariaDB GTID,切换前可先 ANALYZE 影子表
仓库:github/gh-ost,v1.1.11 于 2026-08-17 发布。
这个版本在功能层面的变化集中在三处:MariaDB(含 MariaDB GTID)支持、可选的 StatsD/DogStatsD 指标,以及切换前对影子表执行 ANALYZE TABLE。其余是 binlog 处理、发布产物和并发状态方面的修整。
新功能
MariaDB 与 MariaDB GTID(#1724、#1731)
自动识别 server-flavor,针对 MariaDB 使用对应的复制行为和权限要求,并支持 MariaDB GTID 迁移。CI 覆盖 MariaDB 10.5、10.6、10.11、11.4、11.8。
StatsD/DogStatsD 指标(#1701)
可选开启的遥测,覆盖拷贝进度、已应用的 DML、binlog 积压、复制与心跳延迟、限流、切换尝试与阶段、查询延迟、sleep 时间以及 Go runtime 健康状态。支持全局 metric tag。
切换前表分析(#1747)
新增 --analyze-ghost-table-before-cutover,在换表之前执行 ANALYZE TABLE,避免优化器统计信息过期。该行为默认关闭;若分析失败,则中止切换。
缺陷修复与改进
- data race 修复(#1750):更一致地同步并发迁移状态,并在 CI 中启用 Go race detector 以防回归。
- 更高效的 binlog 处理(#1699):对与本次迁移无关的表跳过行数据解码,在 binlog 繁忙的实例上降低 CPU 与内存分配开销。
- 发布二进制更易移植(#1697):release 构建默认关闭 CGO,减少运行时依赖和平台兼容问题。
- 多 flavor 副本测试(#1722):自动化集成测试扩展到 MySQL、Percona Server、MariaDB 的多个版本。
- 发布打包与工作流(#1729、#1753):统一归档与包命名,并用 GitHub workflow 构建和对发布产物做 attestation。
维护项
- go-mysql 升级到 v1.15.0(#1715)
- Testcontainers v0.43、x/crypto v0.54(#1741)
- OpenTelemetry SDK v1.21.0 → v1.43.0(#1740)
- Go 工具链升级到 1.25.12(#1742)
- 命令行 flag 文档(#1706)
- 副本限流文档补充了
--throttle-control-replicas的副本选择要求(#1745)
一条调用示例
在原有迁移参数上加上切换前分析开关即可:
gh-ost \
--host=127.0.0.1 --port=3306 \
--user=ghost --password='***' \
--database=app --table=orders \
--alter="ADD COLUMN note VARCHAR(64) NOT NULL DEFAULT ''" \
--analyze-ghost-table-before-cutover \
--allow-on-master \
--execute
切换阶段注意两点:该开关默认不启用,只有显式传入才会在 swap 前执行 ANALYZE TABLE;一旦分析语句失败(例如权限不足),流程会停在切换之前,不会完成换表,需要先排查原因再重跑。MariaDB 环境下对应权限按 MariaDB 的复制行为准备,server-flavor 由 gh-ost 自行识别。
发布产物
Assets 包含 linux/darwin 的 amd64/arm64 tarball、rpm/deb 包以及 SHA256SUMS。