因測試環境資源回收,需在全新虛擬機上編譯安裝 MySQL 5.6.13 社區版。本文完整記錄從下載原始碼到服務啟動的全過程,重點分析 CMake 編譯階段的多次報錯與最終解決方案,為同類編譯安裝提供參考。
# 下載原始碼
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.13.tar.gz
# 安裝編譯工具鏈
yum install -y cmake make gcc gcc-c++ ncurses-devel libaio-devel bison
# 建立 mysql 用戶與資料目錄
groupadd mysql
useradd -g mysql mysql
mkdir -p /data/mbdata
tar -xvf mysql-5.6.13.tar.gz
cd mysql-5.6.13
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 \
-DMYSQL_DATADIR=/data56 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/data56/mysql.sock \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
報錯:CMAKE_C_COMPILER not found、CMAKE_CXX_COMPILER not found
原因:未安裝 gcc/g++ 編譯器。
解決:yum install -y gcc gcc-c++
TestBigEndian.cmake 失敗安裝 gcc 後再次 cmake,報錯:no suitable type found 在 TestBigEndian.cmake:31。
嘗試:補裝 ncurses-devel、libaio、bison 等依賴,仍報相同錯誤。
發現多次在同一建構目錄下反覆 cmake 會殘留錯誤快取。徹底清理並重新解壓:
cd /root
rm -rf mysql-5.6.13
tar -xvf mysql-5.6.13.tar.gz
cd mysql-5.6.13
# 再次執行相同 cmake 命令
結果:配置成功完成,輸出 Configuring done、Generating done、Build files have been written to: /root/mysql-5.6.13。
核心心得:CMake 會在建構目錄生成 CMakeCache.txt 等快取檔案,若前序依賴缺失導致配置失敗,後續補齊依賴後直接重跑 cmake 往往無法刷新快取,必須 刪除建構目錄重新解壓原始碼 或執行 make clean/rm -rf CMakeCache.txt CMakeFiles 才能獲得乾淨環境。
# 編譯(視 CPU 核心數可加 -j 參數加速)
time make
time make install
# 初始化資料目錄
cd /usr/local/mysql56
chown -R mysql .
chgrp -R mysql .
cp support-files/my-default.cnf /etc/my56.cnf
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data56 --defaults-file=/etc/my56.cnf
初始化過程中出現 TIMESTAMP with implicit DEFAULT value is deprecated 警告屬正常現象(MySQL 5.6 新特性),不影響功能。執行兩遍初始化確保無殘留問題。
# 註冊系統服務
cp support-files/mysql.server /etc/init.d/mysqld56
chmod 700 /etc/init.d/mysqld56
echo "export PATH=\$PATH:/usr/local/mysql56/bin" >> /etc/profile
source /etc/profile
chkconfig --add mysqld56
# 啟動並測試
service mysqld56 start
mysql -e "SHOW DATABASES;"
成功看到 information_schema、mysql、performance_schema、test 四個預設資料庫,安裝完成。
yum install -y cmake make gcc gcc-c++ ncurses-devel libaio-devel bison 一次裝齊。utf8mb4,預設 utf8 存儲 Emoji 會截斷。編譯安裝雖耗時,但可精確控制版本、模組與優化參數,是 DBA 掌握 MySQL 內核行為的重要途徑。