写点什么

MySQL Shell 8.0.32 for GreatSQL 编译安装

作者:GreatSQL
  • 2023-08-30
    福建
  • 本文字数:4037 字

    阅读完需:约 13 分钟

  • 0.写在前面

  • 1.准备工作

    1.1 准备 Docker 环境

    1.2 下载源码包

    1.3 修改 MySQL Shell 源码包

    1.4 编译相关软件包

  • 2.准备编译 MySQL Shell

    2.1 编译 MySQL 8.0.32

    2.2 编译 MySQL Shell 8.0.32

    2.3 运行测试

  • 3.写在最后

  • 延伸阅读

升级 MySQL Shell for GreatSQL 版本

0. 写在前面

GreatSQL 8.0.32-24 已发布,配套的 MySQL Shell 也需要跟着升级一波,MySQL Shell 版本从 8.0.25 升级到 8.0.32 后,也引入了一些不错的新特性。

下面正式开始 MySQL Shell 编译工作。

1. 准备工作

1.1 准备 Docker 环境

参考编译环境要求 greatsql_docker_build(https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/greatsql_shell_docker_build/Dockerfile) ,构建好一个 Docker 镜像环境,基本上照着做就行,这里不赘述。

1.2 下载源码包

先下载准备好下列几个源码包:

下载完后都放在 /opt/ 目录下,并解压缩。

1.3 修改 MySQL Shell 源码包

打开链接:https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/greatsql_shell_docker_build/mysqlsh-for-greatsql-8.0.32.patch,下载GreatSQL补丁包文件 mysqlsh-for-greatsql-8.0.32.patch

为了让 MySQL Shell 支持 GreatSQL 仲裁节点(ARBITRATOR)特性,需要打上补丁包:

$ cd /opt/mysql-shell-8.0.32-src$ patch -p1 -f < /opt/mysqlsh-for-greatsql-8.0.32.patch
patching file mysqlshdk/libs/mysql/group_replication.ccpatching file mysqlshdk/libs/mysql/group_replication.h
复制代码

1.4 编译相关软件包

1.43.1 antlr4-4.10

编译 antlr4 需要依赖 uuid 库,先安装上:

$ yum install -y libuuid libuuid-devel uuid
复制代码

接着开始编译 antlr4:

$ cd /opt/antlr4-4.10/runtime/Cpp/$ mkdir bld && cd bld$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 && make -j16 && make -j16 install
复制代码

1.4.2 patchelf-0.14.5

$ cd /opt/patchelf-0.14.5$ ./bootstrap.sh && ./configure && make -j16 && make -j16 install
复制代码

1.4.3 protobuf-3.19.4

$ cd /opt/protobuf-3.19.4$ ./configure && make -j16 && make -j16 install
复制代码

1.4.4 rpcsvc-proto-1.4

$ cd /opt/rpcsvc-proto-1.4$ ./configure && make -j16 && make -j16 install
复制代码

2. 准备编译 MySQL Shell

2.1 编译 MySQL 8.0.32

在 MySQL 8.0.32 源码目录中,编译生成 MySQL 客户端相关依赖库,这是编译 MySQL Shell 之前要先做的事:

$ cd /opt/mysql-8.0.32$ mkdir bld && cd bld$ cmake .. -DBOOST_INCLUDE_DIR=/opt/boost_1_77_0 \-DLOCAL_BOOST_DIR=/opt/boost_1_77_0 \-DWITH_SSL=system && \cmake --build . --target mysqlclient -- -j16; \cmake --build . --target mysqlxclient -- -j16
复制代码

P.S,在 cmake 后面加上 -- -j16 的作用是多线程并行编译,这样速度更快,不加的话只能单线程编译,速度比较慢。

2.2 编译 MySQL Shell 8.0.32

编译完成后,切换到 MySQL Shell 源码目录下,准备继续编译:

$ cd /opt/mysql-shell-8.0.32-src/$ mkdir bld && cd bld$ cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/greatsql-shell-8.0.32-24-Linux-glibc2.28-x86_64 \-DMYSQL_SOURCE_DIR=/opt/mysql-8.0.32 \-DMYSQL_BUILD_DIR=/opt/mysql-8.0.32/bld/ \-DHAVE_PYTHON=1 \-DWITH_PROTOBUF=bundled \-DBUILD_SOURCE_PACKAGE=0 \-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \&& make && make install
复制代码

测试提示错误信息:

CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):  Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)  (Required is at least version "3.8")
复制代码

这表示需要先安装 Python 3.8 相关软件包,因为还需要 libssh,就一并安装:

$ yum install -y python38 python38-devel python38-libs python38-pyyaml libssh libssh-config libssh-devel 
复制代码

再次编译,并指定 Python 3.8 的相关路径:

$ cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/greatsql-shell-8.0.32-24-Linux-glibc2.28-x86_64 \-DMYSQL_SOURCE_DIR=/opt/mysql-8.0.32 \-DMYSQL_BUILD_DIR=/opt/mysql-8.0.32/bld/ \-DHAVE_PYTHON=1 \-DWITH_PROTOBUF=bundled \-DBUILD_SOURCE_PACKAGE=0 \-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \-DPYTHON_LIBRARIES=/usr/lib64/python3.8 -DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/ \&& make -j16 && make -j16 install
复制代码

编译完成后,会把二进制文件安装到 /usr/local/greatsql-shell-8.0.32-24-Linux-glibc2.28-x86_64 目录下。

2.3 运行测试

运行 mysqlsh,看是否能直接跑起来:

$ cd /usr/local/greatsql-shell-8.0.32-24-Linux-glibc2.28-x86_64$ ./bin/mysqlsh./bin/mysqlsh: error while loading shared libraries: libprotobuf.so.30: cannot open shared object file: No such file or directory
复制代码

提示无法找到动态库文件 libprotobuf.so.30。实际上这个动态库文件在 /usr/local/lib 目录下,只需将其拷贝一份到 MySQL Shell 的 lib 目录下即可:

$ cp /usr/local/lib/libprotobuf.so.30 lib/mysqlsh/$ ldd bin/mysqlsh | grep libprotobuf.so        libprotobuf.so.30 => /usr/local/greatsql-shell-8.0.32-24-Linux-glibc2.28-x86_64/bin/../lib/mysqlsh/libprotobuf.so.30 (0x00007f60660a2000)
复制代码

这次找到依赖库文件了。

运行 mysqlsh,看能否正常使用:

$ ./bin/mysqlshMySQL Shell 8.0.32...Type '\help' or '\?' for help; '\quit' to exit.WARNING: Found errors loading plugins, for more details look at the log at: /root/.mysqlsh/mysqlsh.log MySQL  Py > \qBye!
复制代码

看到有 WARNING 提示,检查日志文件 /root/.mysqlsh/mysqlsh.log,看到有了类似下面的内容:

ModuleNotFoundError: No module named 'certifi'
复制代码

只需用 pip 安装相应模块即可:

$ pip3.8 install --user certifi
复制代码

好了,开始感受 GreatSQL 8.0.32-24 新版本特性,以及 MGR 仲裁节点的魅力吧 O(∩_∩)O 哈哈~

3. 写在最后

折腾完这些,是不是感觉还是有点麻烦?没关系,我已经把这些工作都封装到 docker 镜像中了,包括 Dockerfile 以及自动编译脚本。下面简单介绍下怎么用。

自行下载 MySQL 和 MySQL Shell,以及 boost 源码包,上面已经给过下载地址了。

下载完后都放在 /opt/ 目录下,并解压缩。

下载 MySQL Shell for GreatSQL 编译辅助包(https://product.greatdb.com/GreatSQL/greatsql-shell-requirement-pkg.tar.xz),解压缩到 /opt/ 目录下。

执行下面命令构建 docker 镜像:

$ cd /opt/greatsql_shell_docker_build$ sh ./greatsql-shell-docker-build.sh /opt/mysql-8.0.32/ /opt/mysql-shell-8.0.32-src/ /opt/boost_1_77_0
复制代码

说明: 上述命令中,脚本后面跟着三个目录参数,分别对应 MySQL、MySQL Shell、boost 源码全路径。

之后就可以自动完成 MySQL Shell for GreatSQL 编译 docker 容器环境,启动并进入该容器:

$ docker images | grep -i greatsql_shellgreatsql_shell_build_env   latest    4db9dcd3c563   About an hour ago   4.1GB
$ docker run -d \-v /opt/mysql-8.0.32:/opt/mysql-8.0.32 \-v /opt/mysql-shell-8.0.32-src:/opt/mysql-shell-8.0.32-src \-v /opt/boost_1_77_0:/opt/boost_1_77_0 \--name greatsql_shell_build_env greatsql_shell_build_env
$ docker exec -it greatsql_shell_build_env bash
复制代码

进入容器后,编辑 /opt/greatsql-shell-automake.sh 脚本,确认其中文件目录是否都正确,确认都没问题的话,就可以执行该脚本开始编译源码了。

# 加载环境变量,并切换到高版本gcc编译环境[root@a5cebc4c0276 opt]# cd /opt[root@a5cebc4c0276 opt]# source ~/.bash_profile[root@a5cebc4c0276 opt]# ls -latotal 136drwxr-xr-x  1 root root    110 Jul 11 08:56 .drwxr-xr-x  1 root root     62 Jul 11 08:08 ..drwxr-xr-x  8 root root   4096 Aug  5  2021 boost_1_77_0-rwxr-xr-x  1 root root    910 Jul 11 08:15 greatsql-shell-automake.shdrwxr-xr-x 32 7161 31415 65536 Jul 11 08:12 mysql-8.0.32drwxr-xr-x 18 root root  65536 Jul 11 08:15 mysql-shell-8.0.32-srcdrwxr-xr-x  3 root root     28 Jul 11 07:27 rh
# 开始自动编译[root@a5cebc4c0276 opt]# sh ./greatsql-shell-automake.sh
复制代码

编译结束后,试着运行 mysqlsh 客户端,确认可用:

/usr/local/greatsql-mysql-shell-8.0.32-centos-glibc2.28-x86_64/bin/mysqlshMySQL Shell 8.0.32
Copyright (c) 2016, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its affiliates.Other names may be trademarks of their respective owners.
Type '\help' or '\?' for help; '\quit' to exit. MySQL Py >
复制代码

看起来挺顺利的哈 :)

延伸阅读

发布于: 刚刚阅读数: 3
用户头像

GreatSQL

关注

GreatSQL社区 2023-01-31 加入

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。 社区:https://greatsql.cn/ Gitee: https://gitee.com/GreatSQL/GreatSQL

评论

发布
暂无评论
MySQL Shell 8.0.32 for GreatSQL编译安装_greatsql_GreatSQL_InfoQ写作社区