環境準備
| 項目 | 版本/規格 |
| OS | SUSE Linux Enterprise Server 10 SP3 (x86_64) |
| Kernel | 2.6.16.60-0.54.5-smp |
| MySQL | 5.6.17 (Generic Linux Source: mysql-5.6.17.tar.gz) |
| CMake | 2.6.4+ (源碼編譯) |
| GCC | 4.3+ (SLES10 自帶) |
依賴包安裝
# 1. CMake (源碼編譯,系統無 rpm)
cd /usr/local/src
wget https://www.cmake.org/files/v2.6/cmake-2.6.4.tar.gz
tar -xzf cmake-2.6.4.tar.gz && cd cmake-2.6.4
./bootstrap && make && make install
# 2. ncurses-devel (CMake 配置階段必需)
# SLES10 掛載 ISO 或下載 rpm
rpm -Uvh ncurses-devel-5.5-18.11.x86_64.rpm
# 3. 其他開發工具
zypper install -y gcc gcc-c++ make perl libaio-devel
MySQL 編譯安裝流程
# 1. 創建用戶組/用戶
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 2. 解壓源碼
cd /usr/local/src
tar -xzf mysql-5.6.17.tar.gz
cd mysql-5.6.17
# 3. CMake 配置 (關鍵參數)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_SSL=system \
-DWITH_ZLIB=system
# 常見 CMake 錯誤處理
# Curses library not found → 安裝 ncurses-devel 後刪除 CMakeCache.txt 重跑
rm -f CMakeCache.txt && cmake . ...
編譯與安裝
# 4. 編譯 (多核並行加速)
make -j$(nproc)
# 5. 安裝
make install
# 6. 後續配置
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R root .
chown -R mysql data
# 7. 初始化數據目錄 (5.6 使用 mysql_install_db)
scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
# 8. 配置文件
cp support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 關鍵項:
# [mysqld]
# datadir=/data/mysql
# socket=/tmp/mysql.sock
# port=3306
# server_id=1
# log_bin=mysql-bin
# innodb_buffer_pool_size=1G
# innodb_log_file_size=256M
# 9. 啟動腳本
cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig mysql on
# 10. 環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
# 11. 啟動服務
service mysql start
# 或
/usr/local/mysql/bin/mysqld_safe --user=mysql &
驗證與安全加固
# 1. 連接測試
mysql -uroot -p
# 初始無密碼,直接回車
# 2. 修改 root 密碼
mysqladmin -uroot password 'StrongPass#2024'
# 3. 安全初始化腳本 (推薦執行)
/usr/local/mysql/bin/mysql_secure_installation
# 會提示:移除匿名用戶、禁止 root 遠程登入、移除 test 庫、重載權限
# 4. 驗證版本與存儲引擎
mysql -uroot -p -e "SELECT VERSION(); SHOW ENGINES; SHOW VARIABLES LIKE 'character_set_%';"
常見編譯問題對照表
| 錯誤現象 | 原因 | 解決 |
| cmake: command not found | 未安裝 CMake | 源碼編譯安裝 CMake 2.6+ |
| Curses library not found | 缺 ncurses-devel | rpm -Uvh ncurses-devel; rm CMakeCache.txt; 重跑 cmake |
| g++: command not found | 缺 gcc-c++ | zypper install gcc-c++ |
| ld: cannot find -laio | 缺 libaio-devel | zypper install libaio-devel |
| innodb_log_file_size mismatch | my.cnf 與現有 ib_logfile 不符 | 停庫、刪除 ib_logfile0/1、修正配置、重啟 |
| Can't create test file | datadir 權限/路徑錯誤 | chown -R mysql:mysql /data/mysql; 確認 my.cnf datadir |
源碼編譯優勢總結
- 硬件優化:`-march=native` 開啟 CPU 所有指令集 (SSE4.2/AVX 等)
- 精簡組件:僅編譯所需存儲引擎,二進制體積減 30%+
- 字符集預設:編譯期固化
utf8mb4,避免運行時配置疏漏
- 調試支持:`-DWITH_DEBUG=1` 產出帶調試符號的二進制,便於核心問題定位
- 版本鎖定:離線環境、合規要求固定版本時唯一選擇
源碼編譯雖耗時,但對核心業務庫、特殊硬件架構 (ARM/POWER)、合規環境是必備技能。建議構建內部 RPM/DEB 包實現標準化部署。