萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

CentOS 7 從源碼編譯安裝 MySQL 5.7/8.0:CMake 完整實戰教程

MySQL 5.5+ 棄用傳統 ./configure,全面採用 CMake 構建系統。源碼編譯安裝雖較二進位包繁瑣,但可精準控制編譯選項(如啟用/禁用特定儲存引擎、調整預設字符集、指定 Boost 路徑等),是掌握 MySQL 內核、定製化部署的必修課。本文以 CentOS 7.9 + MySQL 5.7.42 為例,記錄全流程最佳實踐。

環境準備

# 1. 系統版本確認
cat /etc/redhat-release
uname -a

# 2. 建立專用用戶(無家目錄、禁止登入)
useradd -M -s /sbin/nologin mysql
id mysql

# 3. 安裝編譯依賴
yum -y install gcc gcc-c++ cmake3 ncurses-devel libaio-devel \
  openssl-devel bison perl-Data-Dumper wget tar gzip

# 4. 下載源碼包(官方或鏡像)
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.42.tar.gz
# 含 Boost 的包可避免後續下載 Boost 失敗

CMake 配置關鍵參數解析

tar -xzf mysql-boost-5.7.42.tar.gz
cd mysql-5.7.42

cmake3 \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/data/mysql \
  -DSYSCONFDIR=/etc \
  -DWITH_BOOST=./boost \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
  -DDOWNLOAD_BOOST=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_DEBUG=0 \
  -DCMAKE_BUILD_TYPE=Release

編譯、安裝與初始化

# 1. 編譯(依 CPU 核心數並行,例 8 核)
make -j$(nproc)

# 2. 安裝
make install

# 3. 目錄授權
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql

# 4. 初始化數據目錄(5.7+ 必須指定 --initialize-insecure 或 --initialize)
/usr/local/mysql/bin/mysqld \
  --initialize-insecure \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/data/mysql

# 5. 配置 my.cnf(參考上一篇生產級模板)
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 填入 basedir、datadir、socket、pid-file 等

# 6. 註冊系統服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

# 7. 環境變數
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

# 8. 啟動並驗證
systemctl start mysqld
mysql -uroot -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'char%';"

常見編譯錯誤與解決

參數說明
CMAKE_INSTALL_PREFIX安裝根目錄
MYSQL_DATADIR資料目錄(建議獨立掛載點)
WITH_BOOST指定 Boost 源碼路徑,MySQL 5.7+ 強依賴
DEFAULT_CHARSET預設字符集,生產環境強烈建議 utf8mb4
WITH_SSL=system使用系統 OpenSSL,避免編譯舊版漏洞
CMAKE_BUILD_TYPE=Release釋出版優化,去除調試符號
錯誤現象原因解決
CMake Error: Could NOT find Curses缺 ncurses-develyum install ncurses-devel
Boost not found / version mismatchBoost 版本不匹配或未指定路徑使用 mysql-boost 打包版,或 -DWITH_BOOST=路徑 -DDOWNLOAD_BOOST=1
ld: cannot find -lsslOpenSSL 開發包缺失yum install openssl-devel
make 過程 segmentation fault記憶體不足(<2GB)增加 swap 或減少並行度 make -j2

升級到 MySQL 8.0 的關鍵差異

  • 移除 WITH_INNOBASE_STORAGE_ENGINE 等引擎選項(InnoDB 內建)。
  • 新增 -DWITH_AUTHENTICATION_LDAP=1、-DWITH_ROUTER=1 等元件選項。
  • 預設字符集已為 utf8mb4,無需額外指定。
  • 需 CMake 3.4+,GCC 5.3+。

源碼編譯安裝賦予你對 MySQL 運行時行為的終極控制權。生產環境建議結合 Ansible/SaltStack 將上述流程封裝為冪等 Playbook,實現「基礎設施即代碼」,確保集群一致性與可複現性。

copyright © 萬盛學電腦網 all rights reserved