-march=native)。yum -y install gcc gcc-c++ make cmake ncurses-devel bison \
libaio-devel openssl-devel perl-Data-Dumper
關鍵包:
cmake ≥ 3.0(5.6 需 3.0+,舊版 yum 可能過低,需手動編譯 cmake)。ncurses-devel:缺失會報 curses.h not found。bison:解析器生成器,缺失報 bison not found。cd /usr/local/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
tar -zxvf mysql-5.6.51.tar.gz
cd mysql-5.6.51
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.51 \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=0 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_DEBUG=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DWITH_BOOST=boost_1_59_0 # 5.7+ 需指定 boost 路徑,5.6 可忽略
參數分類說明:
| 類別 | 參數 | 作用 |
|---|---|---|
| 路徑 | CMAKE_INSTALL_PREFIX | 二進制、庫、頭文件安裝根目錄 |
| 路徑 | MYSQL_DATADIR | 數據文件目錄(啟動後仍可在 my.cnf 覆蓋) |
| 路徑 | SYSCONFDIR | my.cnf 搜索目錄 |
| 引擎 | WITH_*_STORAGE_ENGINE=1 | 靜態編入指定引擎,0=不編入,1=靜態編入 |
| 字符集 | DEFAULT_CHARSET/DEFAULT_COLLATION | 編譯期默認字符集,運行時仍可 my.cnf 覆蓋 |
| 網絡 | MYSQL_TCP_PORT/MYSQL_UNIX_ADDR | 硬編碼默認端口與 Socket 路徑 |
| 功能 | ENABLED_LOCAL_INFILE=1 | 允許 LOAD DATA LOCAL INFILE |
# 多核並行編譯(根據 CPU 核心數調整 -j)
make -j$(nproc)
# 安裝
make install
常見編譯錯誤處理:
CMakeCache.txt 殘留導致參數不生效 → rm -f CMakeCache.txt && rm -rf CMakeFiles 後重跑 cmake。ncurses 找不到 → 確認 ncurses-devel 已裝,或指定 -DCURSES_LIBRARY=/usr/lib64/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include。c++: internal compiler error: Killed → 增加 swap 或減少 -j 並行度。# 創建用戶組/用戶
groupadd -g 497 mysql
useradd -u 499 -g mysql -s /sbin/nologin -M mysql
# 權限
chown -R mysql:mysql /usr/local/mysql-5.6.51
chown -R mysql:mysql /data/mysql
# 拷貝配置模板
cp /usr/local/mysql-5.6.51/support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 填入 basedir、datadir、port、socket、字符集等
# 初始化系統表(5.6 仍用 mysql_install_db)
/usr/local/mysql-5.6.51/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql-5.6.51 \
--datadir=/data/mysql
# 啟動
/usr/local/mysql-5.6.51/bin/mysqld_safe --defaults-file=/etc/my.cnf &
# 驗證
/usr/local/mysql-5.6.51/bin/mysql -uroot -e "SHOW VARIABLES LIKE 'version';"
# /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql-5.6.51/bin:$PATH
# systemd 服務文件 /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL 5.6 Source Build
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-5.6.51/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql-5.6.51/bin/mysqladmin --defaults-file=/etc/my.cnf shutdown
PIDFile=/data/mysql/mysql.pid
TimeoutSec=300
[Install]
WantedBy=multi-user.target
# 生效
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
basedir 軟鏈接指向新版 → 啟新服務 → 運行 mysql_upgrade。/data/mysql 獨立於代碼目錄,遷移極其方便。