MySQL 5.5+ 棄用 configure 改用 CMake 建置系統。本文提供從依賴安裝、CMake 參數映射、存儲引擎選擇、SSL/分區引擎編譯錯誤修復、到部署配置、啟動驗證的完整生產級編譯安裝流程,基於 CentOS/RHEL 環境實測。
# 基礎建構工具
yum -y groupinstall "Development Tools"
yum -y install cmake3 # 或從源碼編譯 cmake 3.12+
# MySQL 編譯依賴
yum -y install \
gcc gcc-c++ \
ncurses-devel \
libaio-devel \
openssl-devel \
zlib-devel \
bison \
perl-Data-Dumper \
rpcgen
| 舊 configure 參數 | CMake 參數 | 說明 |
|---|---|---|
--prefix | -DCMAKE_INSTALL_PREFIX | 安裝根目錄 |
--sysconfdir | -DSYSCONFDIR | 配置檔目錄 (相對 prefix) |
--localstatedir | -DMYSQL_DATADIR | 資料目錄 |
--with-tcp-port | -DMYSQL_TCP_PORT | TCP 連接埠 |
--with-unix-socket-path | -DMYSQL_UNIX_ADDR | Unix socket 路徑 |
--with-mysqld-user | -DMYSQL_USER | 運行用戶 |
--with-extra-charsets | -DEXTRA_CHARSETS | 額外字符集 |
--with-readline | -DWITH_READLINE | Readline 庫 |
--with-ssl | -DWITH_SSL | SSL 庫 (system/bundled/yes/no) |
--with-embedded-server | -DWITH_EMBEDDED_SERVER | 嵌入式伺服器 |
--enable-local-infile | -DENABLED_LOCAL_INFILE | LOAD DATA LOCAL |
--with-plugins | -DWITH_*_STORAGE_ENGINE | 存儲引擎 (見下表) |
--with-debug | -DWITH_DEBUG | 除錯版本 |
| 引擎 | 啟用選項 | 停用選項 | 備註 |
|---|---|---|---|
| InnoDB | -DWITH_INNOBASE_STORAGE_ENGINE=1 | -DWITHOUT_INNOBASE_STORAGE_ENGINE=1 | 核心引擎,預設啟用,5.6+ 必須啟用 |
| MyISAM | 強制內建 | 不可停用 | 系統表依賴 |
| MEMORY/HEAP | 強制內建 | 不可停用 | |
| CSV | 強制內建 | 不可停用 | |
| ARCHIVE | -DWITH_ARCHIVE_STORAGE_ENGINE=1 | -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 | 壓縮只讀歸檔 |
| BLACKHOLE | -DWITH_BLACKHOLE_STORAGE_ENGINE=1 | -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 | 測試/複寫過濾 |
| PARTITION | 預設啟用 | -DWITHOUT_PARTITION_STORAGE_ENGINE=1 | 64 位舊版 GCC 編譯失敗須停用 |
| FEDERATED | -DWITH_FEDERATED_STORAGE_ENGINE=1 | -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 | 遠程表映射 |
| PERFORMANCE_SCHEMA | 預設啟用 | -DDISABLE_PSI_*=1 | 監控儀表 |
關鍵:未指定 WITH/WITHOUT 的引擎編譯為動態外掛 (ha_*.so),需 INSTALL PLUGIN 或 --plugin-load 載入。
cmake3 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6 \
-DSYSCONFDIR=/etc/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_ZLIB=system \
-DWITH_LZ4=system \
-DWITH_ZSTD=system
# 錯誤:undefined reference to `ha_partition::ha_partition...'
# 原因:舊版 GCC/glibc 浮點數處理缺陷
# 修復:停用分區引擎
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
# 5.6.10+ 強制需 SSL
# 方案 A:使用系統 OpenSSL (推薦)
-DWITH_SSL=system
# 方案 B:使用內建 yaSSL (舊版相容)
-DWITH_SSL=bundled
# 確認 openssl-devel 已安裝
# 重新編譯前必須清理
make clean
rm -f CMakeCache.txt
# 或直接刪除建構目錄重建
rm -rf build && mkdir build && cd build
yum -y install rpcgen # 或 libtirpc-devel
tar xf mysql-5.6.xx.tar.gz
cd mysql-5.6.xx
mkdir build && cd build
make -j$(nproc) # 並行編譯
make install
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /data/mysql /var/log/mysql /var/run/mysqld
chown -R mysql:mysql /data/mysql /var/log/mysql /var/run/mysqld
chmod 750 /data/mysql
/etc/mysql/my.cnf 或 /etc/my.cnf)
[mysqld]
basedir=/usr/local/mysql-5.6
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve
explicit_defaults_for_timestamp=true
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
max_connections=500
/usr/local/mysql-5.6/scripts/mysql_install_db \
--defaults-file=/etc/mysql/my.cnf \
--basedir=/usr/local/mysql-5.6 \
--datadir=/data/mysql \
--user=mysql
cp /usr/local/mysql-5.6/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
/usr/local/mysql-5.6/bin/mysql -uroot -p -e "SELECT VERSION(); SHOW ENGINES;"
/usr/local/mysql-5.6/bin/mysqladmin -uroot password 'StrongRootPass123!'
datadir、my.cnf,執行 mysql_upgrade。mysqldump --all-databases --routines --triggers --single-transaction → 全新編譯安裝 → 還原。mysqltuner.pl、pt-variable-advisor 定期檢視。xtrabackup 熱備份 + Binlog 時間點恢復。MySQL 源碼編譯安裝核心在於:依賴完整、CMake 參數精準映射、存儲引擎按需啟用、SSL 選項正確、PARTITION 64位避坑、清理快取重建、權限目錄規範、配置檔最佳化、啟動腳本標準化。掌握此流程,即可在任何 Linux 環境部署高效能、可定制、安全合規的 MySQL 實例。