在linux 平台上源碼編譯安裝MySQL 8.0


從根源上掌握MySQL安裝,以此類推,在linux 平台上通過源碼安裝其他c/c++軟件都是大同小異​。

1. 安裝方式

linux 的安裝包分為RPM 包、二進制包和源碼包。

不同的安裝方式各有優缺點,比較三者

 

RPM

二進制

源碼

優點

安裝簡單,適合初學者學習使用

安裝簡單;靈活性好;單台服務器可以安裝多個版本的 MySQL 軟件

與平台無關,可按需定制編譯,最靈活;性能最好;單台服務器可以安裝多個版本的 MySQL 軟件

缺點

需要單獨下載客戶端和服務器;安裝路徑不靈活,默認路徑不能修改,一台服務器只能安裝一個版本的MySQL軟件

已經經過編譯,性能不如源碼編譯得好;不能靈活定制編譯參數

安裝過程較復雜;編譯時間長

文件布局

/usr/bin (客戶端程序和腳本)

/usr/sbin (mysqld服務器)

/var/lib/mysql (日志文件和數據庫)

/usr/share/man (Linux 文檔頁)

/usr/include/mysql (包含(頭)文件)

/usr/lib/mysql (庫文件)

/usr/share/mysql (錯誤信息和字符集文件)

bin (客戶端程序、mysqld服務器和實用程序)

docs (文檔)

man (Linux 文檔頁)

include (包含(頭)文件)

lib (庫文件)

share (錯誤消息和字典、安裝數據庫的SQL文件)

support-files (其他支持文件)

bin (客戶端程序、mysqld服務器和實用程序)

docs (文檔)

man (Linux 文檔頁)

include (包含(頭)文件)

lib (庫文件)

share (錯誤消息和字典、安裝數據庫的SQL文件)

support-files (其他支持文件)

二進制和源碼的本質區別在於,源碼安裝多了:源代碼程序編譯參數配置、編譯和安裝成二進制的過程,然而最耗時的就是這三步。

2. 選擇源碼安裝的原因

原因很簡單:與平台無關,可按需定制編譯,最靈活;性能最好可以安裝到自己想要安裝的目錄、並且支持單台服務器安裝多個版本的MySQL

官網直接下載下來的二進制安裝包是按照一般情況配置好了編譯的默認參數,有些默認編譯配置也許不是你想要的,這時就要在編譯階段按需自定義編譯參數,制作完全符合自己要求的二進制MySQL安裝包。如:只編譯支持utf8mb4編碼。

2.1. 怎么選擇安裝方式

用戶既不想安裝最簡單卻不夠靈活的RPM包,又不想安裝復雜費時的源碼包的情況選擇二進制安裝。
對數據庫的性能要求更高,希望能夠更加靈活地定制編譯參數選項的情況選擇源碼安裝。

3. 安裝過程

演示過程的安裝環境:

內存:2G
磁盤:50G
系統:CentOS 7.9
編譯環境:gcc-10.2.0、cmake-3.21.3
數據庫版本:mysql-8.0.27

3.1. 安裝MySQL前環境准備

硬件最低要求內存2G磁盤40G

這個很重要!!!當初我只給了虛擬機20G磁盤,結果編譯不到一半磁盤爆滿了。

3.1.1.安裝一些依賴

yum install -y gcc gcc-c++ ncurses-devel openssl openssl-devel bison bzip2

Solaris Express上的還需要安裝依賴: m4

3.1.2.安裝gcc 10.2.0

1.下載:wget -P /home https://mirrors.aliyun.com/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz
2.解壓:cd /home && tar -xzvf /home/gcc-10.2.0.tar.gz
3.配置依賴項:cd /home/gcc-10.2.0 && ./contrib/download_prerequisites

如果出現error: Cannot download gmp-6.1.0.tar.bz2 from ftp://gcc.gnu.org/pub/gcc/infrastructure/錯誤

wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2

如果報錯其他文件不能下載,去https://gcc.gnu.org/pub/gcc/infrastructure/下載對應文件,復制到/home/gcc-10.2.0即可。

4.創建安裝文件夾:mkdir /usr/lib/gcc/x86_64-redhat-linux/10.2.0
5.創建編譯文件夾:mkdir /home/gcc-build-10.2.0
          cd /home/gcc-build-10.2.0
6.配置安裝文件:../gcc-10.2.0/configure --prefix=/usr/lib/gcc/x86_64-redhat-linux/10.2.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib
7.編譯和安裝:make && make install

兩小時后再回來看看安裝好沒……

8.備份原gcc

mv /usr/bin/gcc /usr/bin/gcc-4.8.5
mv /usr/bin/g++ /usr/bin/g++-4.8.5

9.鏈接新gcc

alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 88 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8.5
alternatives --install /usr/bin/gcc gcc /usr/lib/gcc/x86_64-redhat-linux/10.2.0/bin/x86_64-pc-linux-gnu-gcc 99 --slave /usr/bin/g++ g++ /usr/lib/gcc/x86_64-redhat-linux/10.2.0/bin/x86_64-pc-linux-gnu-g++

alternatives --config gcc
鍵入選項編號:2

查看gcc版本

gcc -v

10.替換庫鏈接

rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/lib/gcc/x86_64-redhat-linux/10.2.0/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6

不替換libstdc++.so.6庫鏈接,在使用時可能會出現這些錯誤

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found

查看目前包含哪些庫

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

 3.1.3.安裝cmake-3.21.3

查看linux位數:getconf LONG_BIT
下載cmake:   https://cmake.org/download/
解壓: tar zxvf cmake-3.21.3.tar.gz
連接: cd cmake-3.21.3
引導: ./bootstrap
編譯: gmake
安裝: make install
添加軟連接方便cmake的使用:ln -s /home/software/cmake-3.21.3/bin/cmake /usr/bin/cmake
查看cmake版本:cmake --version

3.2. 正式安裝MySQL

1.下載包含Boost C++ 庫的MySQL源碼包
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.27.tar.gz
2.新建用戶和組
groupadd mysql && useradd -g mysql mysql
3.上傳到mysql用戶目錄並解壓
tar -zxvf mysql-boost-8.0.27.tar.gz && cd mysql-8.0.27
4.用cmake工具來編譯源碼參數配置
cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-install \
-DMYSQL_DATADIR=/home/mysql/mysql-data \
-DWITH_DEBUG=1 \
-DWITH_BOOST=/home/mysql/mysql-8.0.27/boost \
-DCMAKE_C_COMPILER=/usr/bin/gcc \
-DCMAKE_CXX_COMPILER=/usr/bin/g++ \
-DFORCE_INSOURCE_BUILD=1
更多詳細配置請參考官方文檔:https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html#option_cmake_with_boost

5.編譯和安裝

編譯:make
安裝:make install
編譯報錯:
      make[2]: *** [CMakeFiles/abi_check] 錯誤 1
      make[1]: *** [CMakeFiles/abi_check.dir/all] 錯誤 2 單元測試報錯,但不影響編譯 解決辦法:將gtest_disable_pthreads設置為ON
編譯和安裝需要兩小時…………

6.編輯配置文件:vi /etc/my.cnf

############### 客戶端配置 ###############
[client]
port   = 3306
socket = /home/mysql/mysql-data/mysql.sock

############### 服務端配置 ###############
[mysqld]
port = 3306
autocommit     = ON
character-set-server   = utf8mb4
collation-server       = utf8mb4_general_ci
default-storage-engine = INNODB basedir
= /home/mysql/mysql-install datadir = /home/mysql/mysql-data tmpdir = /home/mysql/mysql-data/tmp socket = /home/mysql/mysql-data/mysql.sock pid-file = /home/mysql/mysql-data/mysql.pid log-error = /home/mysql/mysql-data/log/error.log #mysql8.0請在初始化前配上強制小寫,否則后續配上會報錯 lower_case_table_names = 1 [mysql] #關閉自動補全sql命令功能 no-auto-rehash

 7.修改目錄所有者與權限

數據目錄
chown -R mysql:mysql /home/mysql/mysql-data
chmod -R 750 /home/mysql/mysql-data
安裝目錄
chown -R mysql:mysql /home/mysql/mysql-install
chmod -R 750 /home/mysql/mysql-install

8.初始化數據庫

bin/mysqld --initialize --user=mysql

初始化數據庫后記得保存初始化密碼:

password is generated for root@localhost: 0%HS>=+x/Ttf
9.啟動MySQL服務

bin/mysqld_safe --user=mysql &
bin/mysqld --user=mysql &

10.重置登錄密碼

用初始化密碼登錄:​​mysql -u root -p
修改密碼:​alter user 'root'@'localhost' identified by 'root';

不重置無法正常使用mysql

11.后續配置(方便管理和使用mysql)
添加軟連接

ln -s /home/mysql/mysql-install/support-files/mysql.server /etc/init.d/mysql
ln -s /home/mysql/mysql-install/bin/mysql /usr/bin/mysql

更方便的使用官方的腳本(mysql.server)來管理MySQL服務

更方便的使用官方的客戶端工具(mysql)來連接MySQL服務

MySQL服務管理

重啟服務
service mysql restart
開啟服務
service mysql start
停止服務
service mysql stop
查看狀態
service mysql status
強制重新載入
service mysql force-reload

查看服務:netstat -anp|grep 3306

 

參考:

  官方文檔:https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

  書籍:《深入淺出MySQL:數據庫開發、優化與管理維護(第3版)》

原創不易,轉載請指明出處!!!

 獲取相關書記的PDF下載鏈接>>>請關注公眾號👇,發送:135810

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM