前置準備:編譯工具鏈與依賴庫
# 安裝核心編譯工具
yum install -y gcc gcc-c++ ncurses-devel perl cmake
# 或手動編譯 cmake 2.8.10+ (源碼安裝 mysql 5.6 需要)
wget https://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -xzf cmake-2.8.10.2.tar.gz && cd cmake-2.8.10.2
./bootstrap && make && make install
cd ..
系統用戶與目錄規劃
# 建立專用用戶/組 (無登錄 shell)
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 目錄規劃 (遵循 FHS)
mkdir -p /usr/local/mysql # 安裝根目錄
mkdir -p /data/mysqldb # 數據目錄 (獨立掛載點最佳)
mkdir -p /var/log/mysql # 日誌目錄
mkdir -p /var/run/mysql # PID/Socket 目錄
chown -R mysql:mysql /usr/local/mysql /data/mysqldb /var/log/mysql /var/run/mysql
源碼獲取與解壓
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.16.tar.gz
# 或鏡像站
tar -xzf mysql-5.6.16.tar.gz
cd mysql-5.6.16
CMake 配置參數深度解析
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysqldb \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DWITH_DEBUG=0
| 參數 | 說明 | 生產建議 |
| CMAKE_INSTALL_PREFIX | 安裝根目錄 | /usr/local/mysql |
| MYSQL_DATADIR | 數據目錄 | 獨立分區 /data/mysqldb |
| DEFAULT_CHARSET | 預設字元集 | utf8mb4 (支援 Emoji) |
| WITH_INNOBASE_STORAGE_ENGINE | InnoDB 引擎 | 1 (必須) |
| WITH_PERFSCHEMA_STORAGE_ENGINE | Performance Schema | 1 (監控必備) |
| CMAKE_BUILD_TYPE | 編譯優化等級 | RelWithDebInfo (帶調試符號的優化版) |
編譯安裝執行
# 編譯 (根據 CPU 核心數調整 -j)
make -j$(nproc)
# 安裝
make install
# 驗證
/usr/local/mysql/bin/mysql --version
安裝後初始化配置
1. 配置文件部署
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
# 或針對 5.6 建議配置模版
cat > /etc/my.cnf <<'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysqldb
socket=/var/run/mysql/mysql.sock
pid-file=/var/run/mysql/mysqld.pid
port=3306
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
max_connections=1000
max_connect_errors=100000
open_files_limit=65535
table_open_cache=2048
max_allowed_packet=64M
binlog_format=ROW
log-bin=mysql-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=1
master_info_repository=TABLE
relay_log_info_repository=TABLE
sync_binlog=1
innodb_flush_log_at_trx_commit=1
innodb_buffer_pool_size=2G # 物理內存 60-70%
innodb_log_file_size=512M
innodb_log_files_in_group=2
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=1
log_queries_not_using_indexes=1
EOF
2. 初始化系統表
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql --datadir=/data/mysqldb --basedir=/usr/local/mysql
3. SSL/RSA 文件生成 (5.6+)
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysqldb
4. 啟動腳本與環境變數
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
# 環境變數
echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
5. 目錄權限最終確認
chown -R mysql:mysql /usr/local/mysql /data/mysqldb /var/log/mysql /var/run/mysql
chmod 750 /data/mysqldb
chmod 755 /var/run/mysql
啟動驗證與安全加固
啟動服務
service mysqld start
# 或 systemctl start mysqld (CentOS 7+)
驗證連接
netstat -tulnp | grep 3306
mysql -uroot -p -S /var/run/mysql/mysql.sock
# 初始無密碼,直接回車
安全初始化腳本 (強烈建議)
/usr/local/mysql/bin/mysql_secure_installation
# 設置 root 密碼、移除匿名用戶、禁止 root 遠程登錄、移除 test 庫
手動設置密碼 (備選)
mysqladmin -uroot -S /var/run/mysql/mysql.sock password 'StrongP@ssw0rd!'
常見錯誤排查速查表
| 錯誤現象 | 原因分析 | 解決方案 |
| Starting MySQL..The server quit without updating PID file | datadir 配置錯誤、權限問題、殘留進程 | 檢查 my.cnf datadir、chown mysql:mysql、kill 殘留進程 |
| ERROR 2002: Can't connect through socket '/tmp/mysql.sock' | socket 路徑不匹配 | ln -s /var/run/mysql/mysql.sock /tmp/mysql.sock 或指定 -S 參數 |
| bash: mysql: command not found | PATH 未生效 | source /etc/profile.d/mysql.sh 或重新登錄 |
| CMake 錯誤: CMakeCache.txt exists | 重複配置未清理 | rm CMakeCache.txt 後重新 cmake |
| 編譯失敗: ncurses not found | 缺少開發庫 | yum install ncurses-devel |
生產環境優化清單
- 獨立數據盤:/data/mysqldb 掛載 RAID10/SSD,掛載參數
noatime,nodiratime
- 禁用透明大頁:
echo never > /sys/kernel/mm/transparent_hugepage/enabled 加入 rc.local
- 調整文件句柄:
ulimit -n 65535、/etc/security/limits.conf 添加 mysql 用戶
- Swappiness:
vm.swappiness=1 (避免 swap 影響延遲)
- NTP 時間同步:
ntpdate pool.ntp.org、配置 chronyd
- 防火牆:僅開放應用服務器 IP 訪問 3306
- 備份腳本:XtraBackup 物理備份 + Binlog 增量
- 監控接入:Prometheus + mysqld_exporter / PMM
總結
編譯安裝 MySQL 5.6 雖然步驟繁多,但能精確控制特性、優化參數、適配硬體。關鍵成功因素:cmake 參數精準、數據目錄獨立、utf8mb4 全鏈路、GTID 啟用、安全腳本執行、生產優化清單落地。現代部署建議優先考慮二進制包、Docker 或包管理器,編譯安裝保留給極致定製化場景。