想要开发plugin,但是使用官方tidb镜像就会报错:error=“plugin.Open("/plugins/audit-1"): plugin was built with a different version of package github.com/pingcap/tidb/parser/format”
5.4和6.5都有这个问题
当前经过我的观察(我试了一下自己编译tidb镜像),主要原因应该是:编译plugin用到的 ./parser 的绝对路径要和 编译的tidb镜像 的 ./parser 的绝对路径 相同
所以问题变成了:官方tidb镜像编译时的代码路径是什么呢? 我试了 /tidb, /ws/tidb, /go/src/github.com/pingcap/tidb, 都不行,有大佬了解这方面吗?
Ref: TiDB 的Arm版的镜像的Dockerfile在哪里?
好像是这个,我对这个不熟,不是非常确定。
感谢大佬回答~
这个我找到过,按artifacts来说就是 /ws ,但是不是这个
我当前的进展是,假如加载错误,报错信息里面会打印绝对路径(带jenkins的一长串,好像是那个)
tidb报错的时候显示 /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/parser/terror/terror.go:292
所以应该是 /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb 这个目录下面,但是我并没有找到相关的资料=。=
自己重新编译tidb和插件。
这个确实是可以解决,但是还是想用官方镜像……
关联贴已经解决了。
这个帖子我有看见,感觉对不上,https://github.com/PingCAP-QE/ci/blob/main/jenkins/Dockerfile/release/linux-arm64/tidb 没有具体的编译环境
我帮你问问
tidb-server 和 plugin 一定要在一个相同环境设置下编译。
可使用这个dockerfile 适当修改编译步骤进行编译 tidb-server 和 自己开发的 plugin。
-
基于 centos7 编译: artifacts/dockerfiles/cd/builders/tidb/centos7/Dockerfile at main · PingCAP-QE/artifacts · GitHub
-
基于 rocky linux 8 编译:artifacts/dockerfiles/cd/builders/tidb/Dockerfile at main · PingCAP-QE/artifacts · GitHub
注意编译时通过 GOLANG_VERSION 这个 build args 控制编译环境的 golang 版本匹配 tidb 代码编译需要的版本。
比如 v6.5 系列使用 golang 1.19.x 版本。
这个是比较陈旧的内容, 而且仅仅是组装镜像,不涉及二进制内容的编译,目前演进后不再使用了。你如果编译 release-6.x 分支开发编译可基于我在话题中的另一个回复来实践。
这样……所以tidb-server是需要自己编译一份的吗?
我当前试了下,6.5.x 是可以适配官方版 tidb-server的,但是7.5.x 就不行,会报错 plugin was built with a different version of package go.uber.org/atomic