版本说明:
go: 1.14.2
gh-ost: 1.0.36
linux: Red Hat Enterprise Linux Server release 7.2
go环境安装
https://mytecdb.com/blogDetail.php?id=125
注意的点:
1、操作系统本地源带的go版本为1.11.5,以下安装步骤需要先安装低版本,然后升级的步骤。
2、go版本升级并不连续,比如1.16版本必须在1.14版本基础上升级,如果在1.11版本之上升级1.16版本会报错。
安装步骤:
1、yum安装低版本go
yum install golang
go -version 查看下版本
2、下载高版本go源码
go语言源码托管在github上,下载相应的go版本即可。
https://github.com/golang/go/releases
本文使用当前最新的1.14.2版本:
wget https://github.com/golang/go/archive/go1.14.2.tar.gz
解压:
tar xf go1.14.2.tar.gz
cd go-go1.14.2/src
3. 生成编译工具链
GOOS=linux GOARCH=amd64 ./bootstrap.bash
上面这个命令需要系统已经安装了go环境,如果没有,使用yum install golang或者apt-get install golang-go 安装,
通过这种方式安装的go一般都是低版本的,通过低版本go编译源码,安装高版本go,然后把低版本go替换掉。
4. 开始编译
./all.bash
编译完成之后,查看go版本:
cd ../bin
./go version
输出:
go version go1.14.2 linux/amd64
5、go env
可以查看go相关的环境信息
后面会用到的环境设置有
GOROOT : go的安装目录
GOPATH: go 依赖包的查找路径。
gh-ost编译
1、下载gh-ost对应版本的源码
https://github.com/github/gh-ost/tags
上传到服务器进行解压,我是放在/tmp/目录下
cd /tmp
tar -xvzf gh-ost-1.0.36.tar.gz
2、配置go的环境变量
vi ~/.bashrc
### 根据实际go的安装路径和gh-ost的放置目录改写
export GOROOT=/tmp/go-go1.14.2/
export GOPATH=/tmp/gh-ost-1.0.36/vendor:/root/go
export PATH=/tmp/go-go1.14.2/bin/:$PATH
source ~/.bashrc
3、编译安装
cd gh-ost-1.0.36
bash build.sh
报错:
Building GNU/Linux binary
go/cmd/gh-ost/main.go:15:2: cannot find package "github.com/github/gh-ost/go/base" in any of:
/tmp/go-go1.14.2/src/github.com/github/gh-ost/go/base (from $GOROOT)
/tmp/gh-ost-1.0.36/vendor/src/github.com/github/gh-ost/go/base (from $GOPATH)
/root/go/src/github.com/github/gh-ost/go/base
go/cmd/gh-ost/main.go:16:2: cannot find package "github.com/github/gh-ost/go/logic" in any of:
/tmp/go-go1.14.2/src/github.com/github/gh-ost/go/logic (from $GOROOT)
/tmp/gh-ost-1.0.36/vendor/src/github.com/github/gh-ost/go/logic (from $GOPATH)
/root/go/src/github.com/github/gh-ost/go/logic
Build failed for GNU/Linux
解决方式:
mkdir -p /tmp/gh-ost-1.0.36/vendor/src/github.com/github/gh-ost/
# 将gh-ost代码中的go目录拷贝到新建的目录下
cp -r /tmp/gh-ost-1.0.36/go /tmp/gh-ost-1.0.36/vendor/src/github.com/github/gh-ost/
重新编译就好:
[root@mysql4 gh-ost-1.0.36]# bash build.sh
Building GNU/Linux binary
Binaries found in:
/tmp/gh-ost/gh-ost-binary-linux-20210308192135.tar.gz
本次问题及解决方式:
问题描述:
汇聚库采用rewrite方式,做比如(order, order1)的映射转换。
gh-ost默认的创建各种表(_gho,_ghc)和rename动作时,表名前带有库名前缀。
导致gh-ost生成的ddl无法在汇聚库端rewrite。现象为汇聚库sql线程down掉,报库名不存在的错误。
解决方案:
修改gh-ost代码,将生成的建表及rename语句去掉database前缀,之后编译安装,使用新的gh-ost版本。