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 失敗
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
| 參數 | 說明 | |
|---|---|---|
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-devel | yum install ncurses-devel |
| Boost not found / version mismatch | Boost 版本不匹配或未指定路徑 | 使用 mysql-boost 打包版,或 -DWITH_BOOST=路徑 -DDOWNLOAD_BOOST=1 |
| ld: cannot find -lssl | OpenSSL 開發包缺失 | yum install openssl-devel |
| make 過程 segmentation fault | 記憶體不足(<2GB) | 增加 swap 或減少並行度 make -j2 |
WITH_INNOBASE_STORAGE_ENGINE 等引擎選項(InnoDB 內建)。-DWITH_AUTHENTICATION_LDAP=1、-DWITH_ROUTER=1 等元件選項。utf8mb4,無需額外指定。源碼編譯安裝賦予你對 MySQL 運行時行為的終極控制權。生產環境建議結合 Ansible/SaltStack 將上述流程封裝為冪等 Playbook,實現「基礎設施即代碼」,確保集群一致性與可複現性。