首页 > 数据库 >MySQL Shell 8.0.32 for GreatSQL编译二进制包

MySQL Shell 8.0.32 for GreatSQL编译二进制包

时间:2024-01-31 14:23:49浏览次数:31  
标签:8.0 Shell 32 GreatSQL 编译 MySQL

MySQL Shell 8.0.32 for GreatSQL编译二进制包

构建MySQL Shell 8.0.32 for GreatSQL

0. 写在前面

之前已经写过一篇前传 MySQL Shell 8.0.32 for GreatSQL编译安装,最近再次编译MySQL Shell二进制包时,发现了一些新问题,因此重新整理更新本文档。

1. 几处新问题

这次编译MySQL Shell发现几个新问题,下面一一列举。

  1. MySQL Shell要求配套的antlr4版本必须是4.10.0,配套的protobuf必须是3.19.4,其他版本都不行。

  2. 部分包需要科技才能下载,有些环境下就没那么方便了,因此我都下载到本地并打包好了。

  3. 在编译antlr4时还要再下载googletest依赖包,这个下载地址也是要科技的,在内网环境中会失败,因此我antlr4源码包微调了下,把googletest依赖包也打进去了,也可以通过微调代码略过该步骤,这样就可以避免编译问题。

针对这些情况,为了方便社区用户,我直接将整个二进制包编译工作打包成Docker镜像,有需要的直接拉取镜像创建容器,只需耐心等上几分钟即可得到MySQL Shell for GreatSQL二进制包了。

使用方法很简单,类似下面这样即可:

# 前面略过Docker的安装过程
# 直接拉取镜像并创建新容器
$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell_build bash

# 查看容器日志,大概要等几分钟才能编译完成,取决于服务器性能
# 如果看到类似下面的结果,就表明二进制包已编译完成
$ docker logs greatsqlsh | tail
1. extracting tarballs
2. compiling antlr4
3. compiling antlr4
4. compiling rpcsvc-proto
5. compiling protobuf
6. compiling greatsql shell
/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqlsh   Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution)
7. MySQL Shell 8.0.32-25 for GreatSQL build completed! TARBALL is:
-rw-r--r-- 1 root root 20343832 Jan 20 21:41 greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz

接下来回退到宿主机,将容器中的二进制包拷贝出来

$ docker cp greatsqlsh:/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz /usr/local/

然后解压缩,就可以在宿主机环境下使用了。

说完用Docker容器构建二进制包的方法,再说下手动编译全过程,有兴趣的同学也可以跟着自己动手做一遍,增加体感。

2. 手动编译过程

2.1 准备Docker环境

参考编译环境要求参考 GreatSQL-Shell Dockerfile ,构建好一个Docker镜像环境,基本上照着做就行,这里不赘述。

2.2 下载源码包

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

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

2.3 修改MySQL Shell源码包

打开链接:https://gitee.com/GreatSQL/GreatSQL-Shell-Docker/blob/master/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.cc
patching file mysqlshdk/libs/mysql/group_replication.h

2.4 编译相关软件包

1.43.1 antlr4-4.10

编译antlr4:

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

如果你的网络环境无法直接从github上下载二进制包,则先自行下载二进制包 https://github.com/google/googletest/archive/e2239ee6043f73722e7aa812a459f54a28552929.zip,并放到antlr4代码包中相应位置,再修改antlr4代码,略过下载步骤,详见下面的做法:

$ cd /opt/antlr4-4.10/runtime/Cpp/
# 新建目录,并将下载的googletest压缩包放在该目录下
$ mkdir -p bld/_deps/googletest-subbuild/googletest-populate-prefix/src/
$ mv PATH/e2239ee6043f73722e7aa812a459f54a28552929.zip bld/_deps/googletest-subbuild/googletest-populate-prefix/src/

# 修改下面文件,注释掉第一行
$ vim runtime/CMakeLists.txt
#option(ANTLR_BUILD_CPP_TESTS "Build C++ tests." ON)

之后就可以用上面的方法进行编译,而不会在下载二进制包环节卡住不动。

2.4.2 patchelf-0.14.5

$ cd /opt/patchelf-0.14.5
$ ./bootstrap.sh && ./configure && make -j16 && make -j16 install

2.4.3 protobuf-3.19.4

$ cd /opt/protobuf-3.19.4
$ ./configure && make -j16 && make -j16 install

2.4.4 rpcsvc-proto-1.4

$ cd /opt/rpcsvc-proto-1.4
$ ./configure && make -j16 && make -j16 install

3. 编译MySQL Shell

3.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

3.2 编译MySQL Shell 8.0.32 for GreatSQL

编译完MySQL 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-25-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 && make install

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

3.3 运行测试

运行 mysqlsh测试前,还要先将libprotobuf.so动态库文件拷贝放到MySQL Shell目录下,再运行测试:

$ cp /usr/local/lib/libprotobuf.so.30 /usr/local/greatsql-shell-8.0.32-25-Linux-glibc2.28-x86_64/lib/mysqlsh/
$ /usr/local/greatsql-shell-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqlsh
MySQL Shell 8.0.32
...
Type '\help' or '\?' for help; '\quit' to exit.
 MySQL  Py > \q
Bye!

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

延伸阅读

本文完。

Enjoy GreatSQL

标签:8.0,Shell,32,GreatSQL,编译,MySQL
From: https://www.cnblogs.com/greatsql/p/17999161

相关文章

  • Xshell7、Xftp7安装破解版教程(亲测可用)
    Xftp7和Xshell7是大家常用的终端工具,让您在访问终端的同时能进行多窗口传输、编辑文件,提高工作效率。下载安装包链接:https://pan.baidu.com/s/1pr-AectkEKEvz0cF0vfi_w?pwd=08aq提取码:08aq软件安装双击下载好的安装包,打开安装向导,选择“下一步”。  请您仔细阅......
  • PowerShell 基本语法
    前言全局说明PowerShell基本语法一、运算符#加减乘除取余+-*/%#自增、自减运算符,和C#或C++完全一致++$i$i++$i----$i#且-and#并-or#非-not!#样例$true-and$false-or-not0!$true#输出TrueFalse#等于(equalto)-eq#不等于(noteq......
  • STM32CubeMX教程30 USB_DEVICE - MSC外设_读卡器
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板USB_OTG_FS为工作在MassStorageClass(大容量存储类)模式下的USB_......
  • PowerShell 接收用户输入参数
    前言全局说明PowerShell接收用户输入参数一、指定选项的参数1.源码param($name,$address="USA",$age)Write-Host"Name:$name"Write-Host"Address:$address"Write-Host"Age:$age"2.执行命令./myscript.ps1-name"Rohan"-age&q......
  • Powershell 命令行快捷键
    前言全局说明powershell快捷键一、快捷键按键说明备注ALT+F7清除命令的历史记录PgUpPgDn显示当前会话的第一个命令和最后一个命令Enter执行当前命令End将光标移至当前命令的末尾Del从右开始删除输入的命令字符Esc清空当前命令行F2......
  • 基本shell命令
    lsls-l  列出每个文件的属性权限相关:-rw-r--r--drwxr-xr-x第一个字母是d表示为directory目录,如果是-表示是普通文件rwx分别表示读取权限、写权限和执行权限每三个为一组,2-4位表示文件所有者的权限,5-7表示同一个group用户的权限,8-10表示其他人的权限ls-a 列出隐......
  • 译:使用 Bun 执行 Shell 脚本
    原文地址(BunBlog):https://bun.sh/blog/the-bun-shell作者:jarredsumner发布时间:2024-01-20前言JavaScript是世界上最流行的脚本语言。那么为什么在JavaScript中执行Shell脚本很困难呢?import{spawnSync}from'child_process'//代码比想象中要稍微复杂一些con......
  • powershell param : 无法将“param”项识别为 cmdlet、函数、脚本文件或可运行程序的
    前言全局说明powershellparam:无法将“param”项识别为cmdlet、函数、脚本文件或可运行程序的名称。一、源码echo"脚本启动"param($age,$address="USA",$name)Write-Host"Name:$name"Write-Output"Address:$address"Write-Output"Age:$age&qu......
  • CSharp: iText 8.0 in donet 4.8.1
     usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.IO;usingSystem.Text;usingiText.IO.Font;usingiText.IO.Image;usingiText.Kernel.Font;usingiTe......
  • Arduino - 使用ESP32-CAM
    简介准备工作:Arduino+ESP32-CAMdemo实现:使用ESP32-CAM实现拍照和视频流Arduino+ESP32开发环境搭建官网下载Arduinohttps://www.arduino.cc/en/software(建议不要下载beta版,可能会有问题)如果官网太慢可以在这里下载[Arduino中文社区-PoweredbyDiscuz!](https://www.a......