MySQL 5.7 引入 CMake 建構系統、Boost 依賴、數據字典重構等重大變更,源碼安裝門檻顯著提高。本文記錄踩坑三天的完整經驗,強調以官方文檔為準,涵蓋依賴準備、CMake 參數解析、初始化、服務管理與安全加固全流程。
# 1. 建立專用用戶/組 groupadd mysql useradd -r -g mysql -s /bin/false mysql # 2. 安裝編譯依賴 yum -y install gcc-c++ cmake make bison ncurses-devel perl # 3. 下載源碼(建議下載含 Boost 的版本 mysql-5.7.11-boost.tar.gz) wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.11.tar.gz tar zxvf mysql-5.7.11.tar.gz cd mysql-5.7.11
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_BOOST=../boost_1_59_0 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DENABLE_DOWNLOADS=1 \ -DMYSQL_DATADIR=/data/mysql \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DSYSCONFDIR=/etc
| 參數 | 說明 |
|---|---|
| CMAKE_INSTALL_PREFIX | 安裝根目錄 |
| DEFAULT_CHARSET/COLLATION | 預設字符集與校對規則 |
| WITH_BOOST | 指定 Boost 庫路徑(5.7 強制依賴) |
| WITH_INNOBASE_STORAGE_ENGINE | 啟用 InnoDB(預設已開啟) |
| ENABLE_DOWNLOADS | 自動下載測試套件(如 gmock),網絡不通時會報錯 |
| MYSQL_DATADIR | 數據目錄,建議獨立掛載點 |
| SYSCONFDIR | my.cnf 搜尋目錄 |
make -j$(nproc) && make install
常見錯誤:gmock-1.6.0.zip 下載失敗 → 手動下載放入 source_downloads/ 或關閉 -DENABLE_DOWNLOADS=0。
# 1. 建立目錄與權限
mkdir -p /data/mysql /data/logs/mysql
chown -R mysql:mysql /data/mysql /data/logs/mysql
# 2. 進入安裝目錄
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R root .
# 3. 初始化數據目錄 (5.7 新方式)
bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql --datadir=/data/mysql
# 4. SSL/RSA 憑證生成
bin/mysql_ssl_rsa_setup --datadir=/data/mysql
# 5. 調整數據目錄權限
chown -R mysql:mysql /data/mysql
cp support-files/my-default.cnf /etc/my.cnf
[mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock port=3306 user=mysql character-set-server=utf8 collation-server=utf8_general_ci explicit_defaults_for_timestamp=true max_connections=500 open_files_limit=65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket=/tmp/mysql.sock port=3306
cp support-files/mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql chkconfig --add mysql chkconfig mysql on
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile source /etc/profile
mysql -uroot -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'character_set%';" # 輸出應顯示 5.7.11 且字符集為 utf8
-DWITH_BOOST,建議下載官方打包版 mysql-5.7.x-boost.tar.gz。mysql_install_db,必須用 mysqld --initialize-insecure(不生成隨機密碼)或 --initialize(生成隨機密碼寫入 error log)。explicit_defaults_for_timestamp=true:5.6.6+ 強制要求,否則啟動警告。refman/5.7。源碼安裝雖繁瑣,卻能精準控制每一項編譯參數、目錄佈局與版本細節,是深入理解 MySQL 內核、構建定製化生產環境的必經之路。