【mysql】gh-ost编译安装

版本说明:
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版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值