代码 gh-ost v1.1.11 支持 MariaDB GTID,切换前可先 ANALYZE 影子表

2026-10-18 21:04:53

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。

复制全文 生成海报 MySQL 在线DDL 工具

推荐文章

程序员茄子在线接单