環境準備與依賴安裝
# 基礎依賴
yum install -y ncurses-devel libaio glibc-devel.i686 glibc-devel gcc gcc-c++
# 關鍵:MySQL 8.0 要求 GCC ≥ 4.8,CentOS 6.4 預設 4.4.7 需手動升級
wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz
tar xf gcc-4.8.2.tar.gz && cd gcc-4.8.2
./contrib/download_prerequisites
./configure --prefix=/usr/local/gcc-4.8.2 --enable-bootstrap --enable-threads=posix --enable-languages=c,c++,objc,obj-c++
make -j$(nproc) && make install # 編譯耗時極長,建議掛載 swap
替換系統默認 GCC
# 備份舊版本
mv /usr/bin/gcc /usr/bin/gcc447
mv /usr/bin/g++ /usr/bin/g++447
mv /usr/bin/c++ /usr/bin/c++447
mv /usr/bin/cc /usr/bin/cc447
# 建立軟鏈接
ln -s /usr/local/gcc-4.8.2/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-4.8.2/bin/g++ /usr/bin/g++
ln -s /usr/local/gcc-4.8.2/bin/c++ /usr/bin/c++
ln -s /usr/local/gcc-4.8.2/bin/gcc /usr/bin/cc
# 解決 libstdc++ 版本衝突
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln -s /usr/local/gcc-4.8.2/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6
安裝 Boost 1.60.0(MySQL 8.0 強依賴)
wget -c "https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.bz2" --no-check-certificate
tar xf boost_1_60_0.tar.bz2 && cd boost_1_60_0
./bootstrap.sh
./b2 stage threading=multi link=shared
./b2 install threading=multi link=shared # 安裝至 /usr/local/include/boost
編譯安裝 MySQL 8.0.0
# 下載源碼
wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.0-dmr.tar.gz
tar xf mysql-boost-8.0.0-dmr.tar.gz && cd mysql-8.0.0-dmr
# CMake 配置(關鍵參數解釋見下表)
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_BOOST=/usr/local/boost_1_60_0/ # 指定 Boost 路徑
make -j$(nproc) && make install
CMake 關鍵參數對照表
| 參數 | 推薦值 | 說明 |
| CMAKE_INSTALL_PREFIX | /usr/local/mysql | 安裝根目錄 |
| MYSQL_DATADIR | /usr/local/mysql/data | 數據文件目錄 |
| DEFAULT_CHARSET | utf8mb4 | 支援 emoji、完整 Unicode |
| DEFAULT_COLLATION | utf8mb4_unicode_ci | 準確排序規則 |
| WITH_BOOST | /usr/local/boost_1_60_0 | 必須指定,否則會重複下載 |
| WITH_INNOBASE_STORAGE_ENGINE | 1 | 啟用 InnoDB(默認已開啟) |
| ENABLED_LOCAL_INFILE | 1 | 允許 LOAD DATA LOCAL INFILE |
後續配置與啟動
# 建立用戶與權限
groupadd mysql && useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
# 初始化數據目錄(生成隨機 root 密碼)
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
bin/mysql_ssl_rsa_setup
# 配置文件
cp support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf # 參考下方模板
# 建立運行目錄
mkdir /var/run/mysqld && chown mysql /var/run/mysqld -R
# 環境變量
echo "export PATH=\$PATH:/usr/local/mysql/bin:/usr/local/mysql/sbin" >> /etc/profile
source /etc/profile
# 系統服務
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
/etc/my.cnf 推薦模板
[mysqld]
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log
# 效能基礎配置
innodb_buffer_pool_size=1G # 物理內存 60-70%
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
max_connections=500
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
常見編譯錯誤排查
| 錯誤現象 | 原因 | 解決方案 |
| CMake 報 Boost 版本不匹配 | 路徑錯誤或版本不符 | 確保 -DWITH_BOOST 指向正確的 1.60.0 目錄 |
| 編譯期 GCC 版本檢查失敗 | 未正確替換系統 gcc | 執行 gcc --version 驗證,檢查 which gcc |
| 鏈接階段找不到 libstdc++ | 動態庫路徑未更新 | 執行 ldconfig、檢查 LD_LIBRARY_PATH |
| 初始化報錯 data 目錄非空 | 殘留文件 | rm -rf /usr/local/mysql/data/* 後重試 |