MySQL 5.7 起棄用傳統 ./configure,全面轉向 CMake 構建系統,並強依賴 Boost C++ 庫。Ubuntu 14.04 (Trusty) 官方源僅提供 5.5/5.6,生產環境需 5.7 新特性 (JSON、GIS、原生分區、優化器增強) 時,必須源碼編譯。本文記錄完整編譯安裝流程、關鍵 CMake 參數、Boost 依賴處理、常見編譯報錯解決方案。
# 1. 系統更新與基礎工具
apt-get update && apt-get -y upgrade
apt-get -y install build-essential libncurses5-dev cmake libssl-dev bison
# 2. 創建 mysql 用戶與目錄
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql
# 3. 下載源碼包 (含 Boost)
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.11.tar.gz
tar zxf mysql-boost-5.7.11.tar.gz
cd mysql-5.7.11
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=0 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=./boost \
-DWITH_SSL=system \
-DWITH_DEBUG=0
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost:自動下載並使用源碼包內置的 Boost 1.59.0,**強烈建議啟用**,避免手動編譯 Boost 耗時 20+ 分鐘-DWITH_EMBEDDED_SERVER=0:禁用嵌入式服務器,**必須關閉**,否則 53% 處編譯報錯 pfs_connect_attr-t Error 1 (Percona 已知問題)-DDEFAULT_CHARSET=utf8mb4:直接指定 utf8mb4,省去後續字符集遷移-DEXTRA_CHARSETS=all:編譯所有字符集支援# 多核並行編譯 (根據 CPU 核心數調整 -j)
make -j$(nproc)
# 安裝
make install
# 權限修正
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql
# 1. 複製配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 加入生產基線參數 (參考文章 180211)
# 2. 初始化數據字典 (5.7.6+)
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
# 3. SSL/RSA 文件生成
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data
# 4. 註冊服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
# 5. 環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
# 1. 查看臨時密碼 (initialize 階段生成於 error log)
grep 'temporary password' /var/log/mysqld.log
# 或 5.7.11 可能輸出到 ~/.mysql_secret
cat ~/.mysql_secret
# 2. 登錄並修改密碼
mysql -uroot -p'臨時密碼'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@StrongPass2024';
-- 5.7.6+ 推薦 ALTER USER,無需 FLUSH PRIVILEGES
| 報錯現象 | 原因 | 解決方案 |
|---|---|---|
Could not find boost | 未指定 Boost 路徑 | 加 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost |
pfs_connect_attr-t Error 1 | 嵌入式服務器編譯失敗 | 加 -DWITH_EMBEDDED_SERVER=0 |
Insecure configuration for --secure-file-priv | 安全目錄未配置 | my.cnf 添加 secure-file-priv=/tmp 或 =NULL |
TIMESTAMP implicit DEFAULT deprecated | 舊語法警告 | my.cnf 添加 explicit_defaults_for_timestamp=1 |
skip-name-resolve 警告 | 禁用 DNS 但存在 localhost 用戶 | 刪除非 IP 用戶:DELETE FROM mysql.user WHERE Host NOT IN ('%','127.0.0.1','::1'); |
service mysqld restart
mysql -uroot -p'Root@StrongPass2024' -e "SELECT VERSION(); SHOW VARIABLES LIKE 'char%';"
# 輸出應顯示 5.7.11 及 utf8mb4 相關變量
源碼編譯安裝 MySQL 5.7 核心在於:CMake 參數精準配置、Boost 依賴自動化、嵌入式服務器禁用、utf8mb4 預設字符集。掌握上述流程,可在任何無官方包的 Linux 發行版上構建定製化 MySQL 實例。生產環境建議優先使用官方 YUM/APT 源或 Docker 部署,減少編譯維護成本。