Sign inSign up

mrzhxl/goinception

By mrzhxl

•Updated 4 months ago

Image
0

45

mrzhxl/goinception repository overview

⁠goInception (MySQL 8.4 兼容版)

goinception:v1.3.0-98-mysql84fix — 在官方 goInception 镜像基础上修复 MySQL 8.4+ 备份失败问题的补丁镜像。

⁠这个镜像解决什么问题

MySQL 8.4 起移除了 SHOW MASTER STATUS 语句(改名为 SHOW BINARY LOG STATUS)。官方 goInception(已停止维护,最后版本 2024-11)在执行带备份的工单时,用 SHOW MASTER STATUS 获取 binlog 位点来生成回滚语句,因此对 MySQL ≥ 8.4 的目标库执行任何带备份的 SQL 工单都会失败,报错:

Execute: You have an error in your SQL syntax ... near 'MASTER STATUS' (sql: SHOW MASTER STATUS;).
Execute: 无法获取master binlog信息.

本镜像修复后,目标库为 MySQL ≥ 8.4 时自动改用 SHOW BINARY LOG STATUS(两者返回列完全相同),低版本 MySQL 和 MariaDB 行为不变。

⁠与官方镜像的差异(完整列表)

仅一处:/goInception 二进制。其余所有镜像层(alpine 基底、glibc、pt-online-schema-change、gh-ost、dumb-init、默认配置)与官方 hanchuanchuan/goinception:latest(digest sha256:b3c0dd26fb50...)逐字节相同。

二进制相对官方源码(master @ cfb88db,即 v1.3.0-97)的代码改动只有 5 行,位于 session/session_inception.go 的 mysqlFetchMasterBinlogPosition():

sql := "SHOW MASTER STATUS;"
if s.dbType == DBTypeMysql && s.dbVersion >= 80400 {
    sql = "SHOW BINARY LOG STATUS;"
}

补丁来源:社区 fork young-0/goInception@a97ca25e⁠(原样 cherry-pick,未做其他改动)。

⁠版本标识

服务启动后通过 MySQL 协议可查询版本,补丁版会报告:

inception get variables like 'version';
-- v1.3.0-98-g7abdc30   (官方线上版本为 v1.3.0-97-gcfb88db)

⁠构建方法(可复现)

git clone https://github.com/hanchuanchuan/goInception.git
cd goInception                      # master HEAD = cfb88db
curl -sL https://github.com/young-0/goInception/commit/a97ca25e1c.patch | git am

# 静态编译 linux/amd64 二进制(工具链版本以 go.mod 为准)
GOTOOLCHAIN=go1.22.1 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
  go build -o bin/goInception tidb-server/main.go

# 以线上同 digest 官方镜像为基底,仅覆盖二进制
docker build --platform linux/amd64 -f Dockerfile.mysql84fix \
  -t goinception:v1.3.0-98-mysql84fix .

Dockerfile.mysql84fix:

FROM hanchuanchuan/goinception@sha256:b3c0dd26fb50d1660f0ae86de118a336ff335464efa402efa5dd6da77ed8ba46
COPY bin/goInception /goInception

⁠使用方式

与官方镜像完全相同,直接替换镜像引用即可(Archery 的 archery-goinception Deployment 把 hanchuanchuan/goinception:latest 换成本镜像),配置文件、端口(4000)、启动命令均无变化。

⁠回滚

镜像改回 hanchuanchuan/goinception:latest(或其 digest sha256:b3c0dd26fb50...)即回到原状,无任何数据或配置迁移。

⁠已知限制

  • 基础镜像沿用官方 2022 年的 alpine 层,未刷新系统包(与当前生产环境一致,未变好也未变差)。
  • 仅构建了 linux/amd64(与 EKS 节点架构一致)。
  • 上游 goInception 已停止维护;若 MySQL 后续版本再有协议/语法变更,需在此基础上继续打补丁。

Tag summary

Content type

Image

Digest

sha256:4612a81fb…

Size

72.2 MB

Last updated

4 months ago

docker pull mrzhxl/goinception:v1.3.0-98-mysql84fix