MySQL Shell 8.0.32 for GreatSQL編譯安裝

来源:https://www.cnblogs.com/greatsql/archive/2023/08/30/17666663.html
-Advertisement-
Play Games

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


  • 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.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-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_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 >

看起來挺順利的哈 :)

延伸閱讀


Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 海康平臺安裝部署環境需要基於HikvisionOS Linux系統(簡稱HIKOS),是基於CentOS 7的 Linux操作系統。 HIKOS系統安裝完成後,即設置了root和hik兩個用戶,初始登錄密碼為123456。 其中root是超級管理員用戶,只能通過本地終端登錄系統,禁止使用遠程終端登錄 ...
  • # QEMU直接從tap/tun取數據 **QEMU tap數據接收步驟:** 1. qemu從tun取數據包 2. qemu將數據包放入virtio硬體網卡。 3. qemu觸發中斷。 4. 虛擬機收到中斷,從virtio讀取數據。 **在qemu中步驟1(tap_read_packet)和步驟2 ...
  • Proxmox VE 是一個運行虛擬機和容器的平臺。 這是 基於 Debian Linux,完全開源。 最大 靈活性,我們實施了兩種虛擬化技術 - 基於內核的虛擬機 (KVM) 和基於容器的虛擬化 (LXC)。 Proxmox VE是一個企業級虛擬化平臺,該平臺集成了基於內核的虛擬機管理程式(KVM ...
  • 本文探討了進程調度的原理和演算法,並提供了全面的概述。進程調度是操作系統中的重要組成部分,用於決定進程的執行順序和分配CPU時間。我們討論了優先順序調度和時間片輪轉調度演算法。優先順序調度根據進程的優先順序確定執行順序,可以分為搶占式和非搶占式。時間片輪轉調度將CPU時間劃分為固定大小的時間片,每個進程在一個... ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230829150945972-2083299480.png) # 1. 精心設計的應用程式通常會在保持實現細節私有的同時公開公有介面,以便未來在不影響最終用戶的情況下修改設計 ...
  • 眾所周知,Mysql的事務隔離級別分為4個,分別是READ-UNCOMMITED,READ-COMMITED,REPEATABLE-READ,SERIALIZABLE,在常規資料庫概論中,前三種事務隔離級別會帶來臟讀、不可重覆讀、幻讀的問題,對應關係如下: ||臟讀|不可重覆讀|幻讀 | | | | ...
  • MySQL 到 SelectDB 的實時數據同步技術,通過 NineData 的數據複製控制台,僅需輕點滑鼠,即可輕鬆完成 MySQL 到 SelectDB 的同步任務配置。NineData 採用先進的數據同步技術,確保數據實時同步到 SelectDB,極大地降低了數據延遲,讓您的決策基於最新數據。 ...
  • 在這個燥熱的夏天,又突然收到告警,分庫分表的主鍵衝突了,這還能忍?不,堅決不能忍,必須解決掉!後面咱們慢慢道來是如何破局的,如何走了一條坎坷路…… ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...