MySQL 5.5+ 放棄 autotools 改用 CMake 構建,依賴 ncurses 庫。本文記錄從源碼下載、依賴安裝、CMake 配置、編譯安裝、用戶創建、數據字典初始化、服務註冊的完整可復現步驟。
# 安裝編譯工具鏈
yum -y install gcc gcc-c++ make bison perl
# 1. 安裝 CMake 2.8.12.2
wget https://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
tar xzf cmake-2.8.12.2.tar.gz
cd cmake-2.8.12.2
./bootstrap && make && make install
# 2. 安裝 ncurses-devel(CMake 會檢查)
wget https://invisible-island.net/datafiles/release/ncurses.tar.gz
tar xzf ncurses.tar.gz
cd ncurses-5.9
./configure && make && make install
wget https://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.37.tar.gz
tar xzf mysql-5.5.37.tar.gz
cd mysql-5.5.37
# 關鍵:刪除舊 CMakeCache.txt 避免配置殘留
rm -f CMakeCache.txt
# CMake 配置(常用生產參數)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DSYSCONFDIR=/etc \
-DWITH_SSL=yes \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=on
make -j$(nproc) && make install
# 1. 創建 mysql 用戶組
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 2. 目錄授權
chown -R mysql:mysql /usr/local/mysql
# 3. 初始化數據字典(5.5 使用 mysql_install_db)
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
# 4. 啟動測試
/usr/local/mysql/bin/mysqld_safe --user=mysql &
# 5. 註冊系統服務
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig --level 345 mysql on
# 6. 啟動服務
service mysql start
# 7. 驗證
/usr/local/mysql/bin/mysql -u root -p
# 密碼為空直接回車
mysql> SHOW DATABASES;
| 報錯 | 原因 | 解決 |
|---|---|---|
| Curses library not found | 缺 ncurses-devel | 源碼安裝 ncurses 或 yum install ncurses-devel |
| Could not find ./bin/my_print_defaults | 未執行 make install 或 basedir 錯誤 | 重新 make install,啟動指定 --basedir |
| mysqld_safe 找不到數據目錄 | datadir 未初始化或路徑錯 | 執行 mysql_install_db 指定正確 basedir/datadir |
my.cnf:innodb_buffer_pool_size=物理內存 60-70%、innodb_log_file_size=256M、max_connections=2000、skip-name-resolve。innodb_file_per_table=ON。mysqlcheck --optimize、mysqldump 備份驗證。源碼編譯雖繁瑣,但能精準控制版本、編譯參數、安裝路徑,是內核級優化與合規審計的前提。腳本化固化流程,實現基礎設施即代碼。