共计 6738 个字符,预计需要花费 17 分钟才能阅读完成。
- 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_…),构建好一个 Docker 镜像环境,基本上照着做就行,这里不赘述。
1.2 下载源码包
先下载筹备好下列几个源码包:
- antlr4-cpp-runtime-4.10-source.zip, https://github.com/antlr/website-antlr4/blob/gh-pages/download/antlr4-cpp-runtime-4.10-source.zip
- boost_1_77_0.tar.gz, https://boostorg.jfrog.io/artifactory/main/release/1.77.0/sou…
- mysql-8.0.32.tar.gz, https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0….
- mysql-shell-8.0.32-src.tar.gz, https://downloads.mysql.com/archives/get/p/43/file/mysql-shel…
- patchelf-0.14.5.tar.gz, https://github.com/NixOS/patchelf/releases/download/0.14.5/patchelf-0.14.5.tar.gz
- protobuf-all-3.19.4.tar.gz, https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protobuf-all-3.19.4.tar.gz
- rpcsvc-proto-1.4.tar.gz, https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
下载完后都放在 /opt/
目录下,并解压缩。
1.3 批改 MySQL Shell 源码包
关上链接:https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/greatsql_…,下载 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.cc
patching 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/mysqlsh
MySQL 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 > \q
Bye!
看到有 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-requireme…),解压缩到 /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_shell
greatsql_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 -la
total 136
drwxr-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.sh
drwxr-xr-x 32 7161 31415 65536 Jul 11 08:12 mysql-8.0.32
drwxr-xr-x 18 root root 65536 Jul 11 08:15 mysql-shell-8.0.32-src
drwxr-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/mysqlsh
MySQL 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 >
看起来挺顺利的哈:)
延长浏览
- 利用 MySQL Shell 装置部署 MGR 集群
- mysql-shell for GreatSQL 8.0.27 编译装置及应用
- MySQL Shell Release Notes, https://dev.mysql.com/doc/relnotes/mysql-shell/8.0/en/
- GreatSQL 8.0.32-24 今日公布
Enjoy GreatSQL :)
## 对于 GreatSQL
GreatSQL 是实用于金融级利用的国内自主开源数据库,具备高性能、高牢靠、高易用性、高平安等多个外围个性,能够作为 MySQL 或 Percona Server 的可选替换,用于线上生产环境,且完全免费并兼容 MySQL 或 Percona Server。
相干链接:GreatSQL 社区 Gitee GitHub Bilibili
GreatSQL 社区:
社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html
技术交换群:
微信:扫码增加
GreatSQL 社区助手
微信好友,发送验证信息加群
。