
mysql-shell for GreatSQL 8.0.27编译安装及使用
● 0. 前言
● 1. 修改说明
● 2. 编译mysql-shell
◆ 2.1 环境准备
◆ 2.2 开始编译mysql & mysql-shell
◆ 2.3 利用patchelf修改mysqlsh二进制文件
● 3. 运行mysql-shell for GreatSQL
0. 前言
由于GreatSQL 8.0.27版本中引入MGR仲裁节点(投票节点,ARBITRATOR)特性,MySQL提供的mysql-shell无法识别该特性,因此提供mysql-shell for GreatSQL版本。
1. 修改说明
需要修改mysql-shell源码,增加对仲裁节点(投票节点)角色类型的支持,涉及到两个文件:
● mysqlshdk/libs/mysql/group_replication.h
● mysqlshdk/libs/mysql/group_replication.cc 在 Member_role 对象中增加 ARBITRATOR 角色类型即可。整个patch文件只有35行,很简单:
2. 编译mysql-shell
从MySQL官网下载的mysql-shell 8.0.27源码包是有问题的,会导致编译失败,需要自己手动修改 CMakeLists.txt 文件。我已经提交bug(#106730)了,升级到8.0.28就可以了。
官方提供的参考文档 https://github.com/mysql/mysql-shell/blob/master/INSTALL 版本太老了(最后更新时间 Aug 19, 2020),几乎完全不可用。
只好我自己摸索了。
2.1 环境准备
下载几个相关的安装包:
● protobuf-all-3.11.4.tar.gz,https://github.com/protocolbuffers/protobuf/releases?page=5
● mysql-8.0.27.tar.gz,https://downloads.mysql.com/archives/community/
● mysql-shell-8.0.27-src.tar.gz,https://downloads.mysql.com/archives/shell/
● boost_1_73_0.tar.gz,https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.gz
● patchelf-0.14.5.tar.gz,https://github.com/NixOS/patchelf/releases/download/0.14.5/patchelf-0.14.5.tar.gz
● rpcsvc-proto, https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
利用下面的Dockerfile构建一个CentOS 8的docker镜像,专门用于编译mysql-shell:
接下来就是制作docker镜像包,然后再启动一个docker容器,详细过程方法可参考这篇文章:自制GreatSQL Docker镜像。
启动容器后,将之前下载的几个安装包都拷贝到容器中的 /opt/ 目录下并解压缩:
接下来先编译安装几个依赖包:
2.2 开始编译mysql & mysql-shell
复制执行下面的命令,一次性完成mysql & mysql-shell编译安装:
编译完成后,会把二进制文件安装到 /usr/local/mysql-shell-8.0.27-18-Linux-glibc2.28-x86_64 目录下。
2.3 利用patchelf修改mysqlsh二进制文件
编译安装完毕后,执行下面的命令,查看 mysqlsh 二进制文件的依赖关系是否都正常,会发现其中有个so依赖文件找不到:
这是因为 libprotobuf.so.22 这个动态库文件在 /usr/local/lib/ 目录下,所以找不到。
这时候,我们可以利用 patchelf 修改 mysqlsh 文件,将依赖路径从绝对路径方式改成相对路径方式:
可以看到,mysqlsh 能找到 libprotobuf 这个动态库文件了,也就可以正常使用了。
3. 运行mysql-shell for GreatSQL
如果想要让mysql-shell支持JavaScript语法,需要再编译时加上 libv8,但其难度太大了,我表示直接放弃。。。
虽然不支持js语法,但还是支持Python语法的呀,略有不同而已,下面举几个常举几个常见的例子作为参照对比:
看到了吧,其实也就是语法风格略有不同而已,没什么本质区别。
接下来可以玩转GreatSQL 8.0.27的仲裁节点新功能了:
对了,第一次启动mysqlsh时,可能会有类似下面的提示:
只要执行下面的指令安装certifi这个Python模块即可:
好了,开始感受MGR仲裁节点的魅力吧 O(∩_∩)O哈哈~
P.S1:这是老叶临时抱佛脚的应急版本,可能还有诸多不完善的地方,后面会推出正式的版本。
PS2:GreatSQL 8.0.27及5.7.36版本很快就会发布,请耐心等待。另外,如果是想使用MGR的话,强烈建议选用8.0版本,不要使用5.7版本,8.0的MGR在功能和可靠性方面都要比5.7好太多。
本文完。
