这里主要介绍 tidb server 的编译, ti kv 和 ti pd 的编译不在本文范围内;
go 语言 1.11 版本之后支持 go.mod, 依赖包在 go.mod 里生成, 如果 go.mod 中某个依赖包在 golang.org 上, 下载和编译依赖包会出错,因为 go 语言的官网 golang.org 在大陆无法访问, 我们可以用 replace 语法来替换依赖包的路径, 手工修改 go.mod 文件, 用 github 上的镜像代替;
例如:
require (
......
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e
......
)
replace (
golang.org/x/net => github.com/golang/net v0.0.0-20190108225652-1e06a53dbb7e
)
红色部分是依赖包的版本号, 需要和 require 里面的包版本号一致;
假设我们的 tidb server 的代码在 $GOPATH/xxx/github.com/pingcap/tidb/ 目录;
用 notepad++ 打开 $GOPATH/xxx/github.com/pingcap/tidb/ 下的 go.mod, 在后面直接添加:
replace (
go.uber.org/atomic v1.3.2 => github.com/uber-go/atomic v1.3.2
go.uber.org/zap v1.9.1 => github.com/uber-go/zap v1.9.1
golang.org/x/net => github.com/golang/net v0.0.0-20190108225652-1e06a53dbb7e
golang.org/x/sys => github.com/golang/sys v0.0.0-20190109145017-48ac38b7c8cb
golang.org/x/text => github.com/golang/text v0.3.0
golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4
golang.org/x/tools => github.com/golang/tools v0.0.0-20190130214255-bb1329dc71a0
golang.org/x/lint => github.com/golang/lint v0.0.0-20181026193005-c67002cb31c3
golang.org/x/sync => github.com/golang/sync v0.0.0-20181221193216-37e7f081c4d4
golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20180821212333-d2e6202438be
golang.org/x/crypto => github.com/golang/crypto v0.0.0-20180904163835-0709b304e793
google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190108161440-ae2f86662275
google.golang.org/grpc => github.com/grpc/grpc-go v1.17.0
google.golang.org/appengine => github.com/golang/appengine v1.1.0
cloud.google.com/go => github.com/googleapis/google-cloud-go v0.26.0
)
添加之后执行 make, 成功;
启动一个 tidb-server:
用 mysql 客户端连接一下:
OK
我环境里的 go 语言版本是 1.12; 系统是 centos;