從mysql源碼編譯出相應的庫和可執行文件及搭建mysql服務端

目錄

1. 問題的提出

2. 源碼下載

3. 升級或安裝某些前置軟件?

3.1. 升級CMake

3.2. 升級gcc、g++

4. 安裝依賴庫

4.1. 安裝OpenSSL

4.2. 安裝Curses

4.3. 安裝pkg-config

5. 編譯、安裝

6. 編譯結果、配置?

7. 編譯錯誤處理

7.1. 錯誤1

7.2. 錯誤2

8.? 搭建mysql數據庫服務端

8.1.?創建mysql用戶及更改相應目錄的屬主

?8.2. 將mysql進程啟動做成服務?

9. 參考鏈接


1. 問題的提出

? ? ? ?由于客戶要求軟件跑在國產飛騰CPU上,而mysql官網上的so沒有基于飛騰的so庫,都是基于X86或ARM的。因為不同的CPU的指令集不同,所以基于X86或ARM的so在飛騰CPU上肯定是不能運行的,所以需要利用mysql源碼在飛騰CPU上編譯出相應的.so庫。

2. 源碼下載

? ? ? ?打開MySQL Community Downloads?頁面如下:

? ? ?因為是要下載源碼,而不是下載編譯好的so,所以在第2個下拉框中選擇“Source Code”,在最后一個下拉框中選擇All Operating Systems開頭的那項,然后在下面選擇下載“Compressed TAR Archive, Includes Boost Headers”項或“Compressed TAR Archive”。

注意:下載需要有oracle賬號,如果你是新注冊賬號或以前有賬號,但忘記了密碼,oracle會向你發郵件,有時收不到郵件,此時請根據收不到oracle注冊或重置密碼郵件導致無法登錄oracle神奇解決方法博文登錄oracle官網。

3. 升級或安裝某些前置軟件?

? ? ? ? 在編譯mysql-8.2.0時,下列軟件必須保證,否則編譯會報錯。

  • cmake, 版本必須 >= 3.14.6。
  • gcc、g++,?版本必須 >= 10.0.0。

3.1. 升級CMake

按如下博文:

CMake 版本升級或CMake版本升級

升級CMake,都會報如下錯誤:

即從源碼編譯cmake會報找不到openSSL,通過如下命令聯網安裝:

sudo snap install cmake --classic

?成功將本機CMake升級到3.27.8版本。或者參見4.1節安裝OpenSSL,再通過源碼安裝。

3.2. 升級gcc、g++

? ? ? ? ?參見Linux下升級gcc(親測可用)博文操作。

4. 安裝依賴庫

? ????????以下安裝以Ubuntu來講解,其它系統也有類似的安裝命令,請根據不同系統,做相應更改。

4.1. 安裝OpenSSL

? ? ? ? 執行如下命令:

sudo apt-get install libssl-dev

如果不安裝OpenSSL,則編譯時會報如下錯誤:

Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR) 

4.2. 安裝Curses

????????執行如下命令,安裝Curses庫:

sudo apt-get install libncurses5-dev

如果不安裝該庫,則會報如下錯誤:?

 Curses library not found.  Please install appropriate package,

4.3. 安裝pkg-config

?????????執行如下命令,安裝pkg-config庫:

sudo apt install pkg-config

如果不安裝,則會報如下錯誤:

Cannot find pkg-config

5. 編譯、安裝

執行如下命令:

sudo cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql8.2.0  -DMYSQL_DATADIR=/opt/mysql8.2.0/data -DWITH_DEBUG=0 -DSYSCONFDIR=/opt/mysql8.2.0/config -DMYSQL_TCP_PORT=3306  -DWITH_BOOST=/opt/mysql8.2.0/boost -DCMAKE_CXX_COMPILER=/usr/bin/g++  -DFORCE_INSOURCE_BUILD=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost_1_77_0

參數說明:

# 參數說明 (不需要輸入進去)

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql的安裝路徑
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定mysql進程監聽套接字文件(數據庫連接文件)的存儲路徑
-DSYSCONFDIR=/etc \
#指定配置文件的存儲路徑
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定進程文件的存儲路徑
-DDEFAULT_CHARSET=utf8 ?\
#指定默認使用的字符集編碼,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \
#指定默認使用的字符集校對規則
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安裝INNOBASE存儲引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安裝ARCHIVE存儲引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安裝BLACKHOLE存儲引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#安裝FEDERATED存儲引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定數據庫文件的存儲路徑
-DWITH_BOOST=boost \
#指定boost的路徑,
-DWITH_SYSTEMD=1
#生成便于systemctl管理的文件

上面的/opt/mysql8.2.0目錄及其子目錄請根據你本機實際創建好或換成你自己的路徑,下同,后文不再就mysql路徑目錄問題做表述。之后執行如下命令編譯:

sudo make -j8

估計編譯耗時1.5小時,注意:如果編譯出錯,請參考第7節排除。編譯完成后,執行如下命令安裝so到指定目錄:

sudo make install

6. 編譯結果、配置?

編譯、安裝后的結果如下:

?執行如下命令打開配置:?

sudo vi /etc/profile

在文件末尾加入如下幾行(注意:路徑換成你本機的實際路徑):

export PATH=/opt/mysql8.2.0/bin:$PATH
export LD_LIBRARY_PATH=/opt/mysql8.2.0/lib:$LD_LIBRARY_PATH

?保存退出,執行如下命令,使配置生效:

 source /etc/profile

7. 編譯錯誤處理

7.1. 錯誤1

version `GLIBCXX_3.4.32' not found
version `GLIBCXX_3.4.29' not found

第1步:使用如下命令查看是否缺失文件(一般來講肯定是缺失的)

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

?結果如下:

可以看到,并沒有3.4.29、3.4.32版本。

?第2步:使用如下命令查看當前系統中是否有其他同類型的文件,找一個版本較高的。

sudo find / -name "libstdc++.so.6*"

如下圖,可以看到有更高版本的同類型文件:

?這個高版本的庫位于gcc編譯構建目錄下,這也就是為何編譯時提示gcc版本太低的原因。然后使用如下命令查看這個文件中是否包含需要的版本:

 strings /home/dansir/gcc-13.2.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.32 |  grep GLIBCXX

結果如下:

如上圖所示,里面包含有我們需要的版本。然后進行如下操作:

sudo  cp /home/dansir/gcc-13.2.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.32 /usr/lib/x86_64-linux-gnu/

?即將上面找到的高版本的復制到?/usr/lib/x86_64-linux-gnu 目錄下,然后執行如下命令刪除軟連接:

sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6

然后執行如下命令重新建立/usr/lib/x86_64-linux-gnu/libstdc++.so.6軟連接,以指向剛才復制的高版本的庫:

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.32  /usr/lib/x86_64-linux-gnu/libstdc++.so.6

問題解決!!!。注意:上面的路徑,請根據你本機實際情況更改。?

7.2. 錯誤2

致命錯誤:已殺死 signal terminated program cc1plus

在虛擬機中編譯的,機器本身是16G內存,分給了虛擬機8G。編譯一個大項目時出現這種提示。檢查原來的/etc/fstab或者通過“sudo swapon -s” 檢查swap文件,發現只有2G左右大小。于是執行如下幾組命令:

sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
sudo mkswap /swapfile
sudo swapon /swapfile

?如果還不行,將8192再改大些。

8.? 搭建mysql數據庫服務端

? ? ? ?說明:請切換到root用戶操作本大節內容,否則某些步驟的操作可能會因為權限不夠而失敗!

8.1.?創建mysql用戶及更改相應目錄的屬主

請切換到root用戶操作,依次執行如下命令:

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /opt/mysql8.2.0
chown -R mysql:mysql /opt/mysql8.2.0/data

注意:上面的命令中,如果你本機沒有/sbin/nologin,則改為: /usr/sbin/nologin

請切換到root用戶操作,編輯配置文件?:

vim /etc/my.cnf
[mysqld]
basedir=/opt/mysql8.2.0
datadir=/opt/mysql8.2.0/data
socket=/tmp/mysql.sock[mysqld_safe]
log-error=/var/log/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysql.pid

請切換到root用戶操作,創建日志文件存放的目錄和pid文件存放的目錄,并賦權給mysql用戶:

mkdir -p /var/log/mysqld /var/run/mysqld
chown -R mysql:mysql /var/log/mysqld
chown -R mysql:mysql /var/run/mysqldtouch /var/log/mysqld/mysqld.log

?請切換到root用戶操作,配置環境變量,方便使用MySQL的命令:

vim /etc/profile
export MYSQL_HOME=/opt/mysql8.2.0
export PATH=$PATH:$MYSQL_HOME/bin

?使配置立即生效:

source /etc/profile

查看mysql版本,以確定是否安裝成功:

mysql --version  # 驗證配置是否成功

?如果出現下面版本信息,則證明安裝成功:

mysql  Ver 8.2.0 for Linux on x86_64 (Source distribution)

請切換到root用戶操作,執行如下命令初始化數據庫:

mysqld --initialize --user=mysql --basedir=/opt/mysql8.2.0 --datadir=/opt/mysql8.2.0/data

?初始化成功后會生成root賬戶的默認密碼。將該密碼復制并保存,因為后面需要使用該密碼登錄到MySQL中修改密碼。

請切換到root用戶操作,執行如下命令啟動mysql進程,如果沒報錯,能看到如下界面,證明啟動成功:

cd /opt/mysql8.2.0/support-files
./mysql.service
Starting MySQL
.. * 

再說一遍:一定要root用戶執行上面的命令,否則會報如下錯誤:

mysql server quit without updating PID file

8.2. 將mysql進程啟動做成服務?

? ? ?增加一個systemd單元配置文件,該文件詳細描述了MySQL服務。文件名為mysqld.service,文件位于 /usr/lib/systemd/system 。

9. 參考鏈接

【1】:ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found - 知乎 (zhihu.com)

【2】:gcc的升級?。

【3】:"Killed signal terminated program cc1plus"編譯錯誤解決

【4】:MySQL——源碼安裝教程?

【5】:mysql安裝(一) - 知乎 (zhihu.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VMware三種網絡模式

橋接模式 NAT(網絡地址轉換模式) Host-Only(僅主機模式) 參考: vmware虛擬機三種網絡模式 - 知乎 (zhihu.com)

【中國平安社招校招】【內推】【當天內推】

中國平安社招校招內推 通過內推鏈接即時內推,反饋速度比正常要快(可私信問進度) 開放大量HC(不限崗位和地區,技術、設計、產品、運營、數據等都可內推) Step1:查看相關職位 瀏覽平安的招聘官網:復制以下地址至瀏覽器打開。注意以下鏈接包含…

一篇文章搞懂WPF動畫的使用技巧

WPF 動畫系統提供了豐富的功能,用于為 UI 元素創建流暢的動態效果。動畫可以應用于任何可用于渲染的屬性,比如位置、顏色、大小等。在 WPF 中,動畫是通過更改隨時間變化的屬性來實現的。 WPF動畫基本用法 例如實現如下的動畫效果&#xff1…

合并區間問題

以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。 示例 1: 輸入:intervals [[1,…

Java如何獲取泛型類型

泛型(Generic) 泛型允許程序員在強類型程序設計語言中編寫代碼時使用一些以后才指定的類型,在實例化時作為參數指明這些類型。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Vis…

WPF樹形控件TreeView使用介紹

WPF 中的 TreeView 控件用于顯示層次結構數據。它是由可展開和可折疊的 TreeViewItem 節點組成的&#xff0c;這些節點可以無限嵌套以表示數據的層次。 TreeView 基本用法 例如實現下圖的效果&#xff1a; xaml代碼如下&#xff1a; <Window x:Class"TreeView01.Mai…

springcloud整合seata我踩過的坑

版本問題 seata 1.5和1.5之前的目錄結構不同,使用docker修改的配置文件也不同 1.4的左右 1.5之后docker 掛載文件也不同 1.5之前是使用自己寫的掛載registry docker run -d -p 8091:8091 -p 7091:7091 --network newlead --name seata-serve -e SEATA_IP192.168.249.132…

4:kotlin 方法(Functions)

想要聲明一個函數需要使用fun關鍵字 fun hello() {return println("Hello, world!") }fun main() {hello()// Hello, world! }格式: fun 方法名(參數1: 參數1類型, 參數2 : 參數2類型, ...): 返回值類型 {方法體return 返回值 }fun 方法名(參數1: 參數1類型, 參數2…

人工智能基礎_機器學習047_用邏輯回歸實現二分類以上的多分類_手寫代碼實現邏輯回歸OVR概率計算---人工智能工作筆記0087

然后我們再來看一下如何我們自己使用代碼實現邏輯回歸的,對二分類以上,比如三分類的概率計算 我們還是使用鶯尾花數據 首先我們把公式寫出來 def sigmoid(z): 定義出來這個函數 可以看看到這需要我們理解OVR是如何進行多分類的,我們先來看這個 OVR分類器 思想 OVR(One-vs-…

UE 進階篇一:動畫系統

導語: 下面的動畫部分功能比較全,可以參考這種實現方式,根據自己項目的顆粒度選擇部分功能參考,我們商業項目動畫部分也是這么實現的。 最后實現的效果如下: 最終效果 目錄: ------------------------------------------- 文末有視頻教程/工程地址鏈接 -------------…

9、鴻蒙應用桌面圖標外觀和國際化

一、項目資源目錄 項目下的resoueces目錄為資源配置目錄&#xff0c;其中base為基礎配置&#xff0c;即在任何語言環境下都會加載的資源&#xff0c; color.json&#xff1a;用于配置顏色&#xff0c;如頁面的背景和文字的顏色。 string.json&#xff1a;用于設置文字&#…

Selenium切換窗口、框架和彈出框window、ifame、alert

一、切換窗口 #獲取打開的多個窗口句柄 windows driver.window_handles #切換到當前最新打開的窗口 driver.switch_to.window(windows[-1]) #最大化瀏覽器 driver.maximize_window() #刷新當前頁面 driver.refresh() 二、切換框架frame 如存在以下網頁&#xff1a; <htm…

Java基礎(程序控制結構篇)

Java的程序控制結構與C語言一致&#xff0c;分為順序結構、選擇結構&#xff08;分支結構&#xff09;和循環結構三種。 一、順序結構 如果程序不包含選擇結構或是循環結構&#xff0c;那么程序中的語句就是順序的逐條執行&#xff0c;這就是順序結構。 import java.util.Sc…

【 OpenGauss源碼學習 —— 列存儲(CStoreMemAlloc)】

列存儲&#xff08;CStoreMemAlloc&#xff09; 概述CStoreMemAlloc 類CStoreMemAlloc::Palloc 函數CStoreMemAlloc::AllocPointerNode 函數CStoreMemAlloc::FreePointerNode 函數CStoreMemAlloc::Repalloc 函數CStoreMemAlloc::PfreeCStoreMemAlloc::Register 函數CStoreMemAl…

杭電oj 2064 漢諾塔III C語言

#include <stdio.h>void main() {int n, i;long long sum[35] { 2,8,26 };for (i 3; i < 35; i)sum[i] 3 * sum[i - 1] 2;while (~scanf_s("%d", &n))printf("%lld\n", sum[n - 1]); }

問鼎web服務

華子目錄 www簡介常見Web服務程序介紹&#xff1a;服務器主機主要數據瀏覽器網址及http介紹urlhttp請求方法 http協議請求的工作流程www服務器類型靜態網站動態網站 快速安裝Apache安裝準備工作httpd所需目錄主配置文件 實驗操作 www簡介 Web網絡服務也叫www&#xff08;world…

編碼的發展歷史

編碼的發展歷史 ASCII&#xff1a; ASCII編碼使用7位二進制數表示一個字符&#xff0c;范圍從0到127。每個字符都有一個唯一的ASCII碼值與之對應。例如&#xff0c;大寫字母"A"的ASCII碼是65&#xff0c;小寫字母"a"的ASCII碼是97。 ASCII字符集包括英文…

linux服務器安裝gitlab

一、安裝gitlab sudo yum install curl policycoreutils-python openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-servicehttp curl https://packages.gitlab.com/install/repositories/gitla…

LabVIEW中將SMU信號連接到PXI背板觸發線

LabVIEW中將SMU信號連接到PXI背板觸發線 本文介紹如何將信號從PXI&#xff08;e&#xff09;SMU卡路由到PXI&#xff08;e&#xff09;機箱上的背板觸發線。該過程涉及使用NI-DCPowerVI將SMU信號導出到PXI_TRIG線上。 在繼續操作之前&#xff0c;請確保在開發PC上安裝了兼容版…

MySQL啟動MySQL8.0并指定配置文件

MySQL啟動MySQL8.0并指定配置文件 mkdir -p /mysql8hello/config ; mkdir -p /mysql8hello/data ; mkdir -p /mysql8hello/logs; mkdir -p /mysql8hello/conf; vim /mysql8hello/config/my.cnf; # 啟動報錯就修改成777&#xff0c;但是會提示風險 chmod 644 /mysql8hello/co…