源碼安裝可深度定製功能、優化參數、適配特定硬件。本文以 CentOS 7 + MySQL 5.6.22 為例,覆蓋 CMake、編譯參數、系統服務集成全過程。
# 核心構建工具
yum -y install gcc gcc-c++ make cmake ncurses-devel bison openssl-devel
# CMake 3.2+(源碼安裝)
wget https://cmake.org/files/v3.2/cmake-3.2.0.tar.gz
tar zxvf cmake-3.2.0.tar.gz
cd cmake-3.2.0 && ./bootstrap && make && make install
# MySQL 專用用戶
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 官方下載
wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz
# 或 RPM 源碼包轉換
rpm2cpio mysql-5.6.22-1.src.rpm | cpio -idmv
tar zxvf mysql-5.6.22.tar.gz
mv mysql-5.6.22 /usr/local/mysql
cd /usr/local/mysql
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
關鍵參數說明:
DEFAULT_CHARSET=utf8mb4:預設全鏈路 utf8mb4,避免亂碼WITH_SSL=system:使用系統 OpenSSL,避免 yaSSL 性能差DOWNLOAD_BOOST=1:MySQL 5.7+ 依賴 Boost,自動下載-DWITH_DEBUG=0:生產環境關閉調試,提升 10-15% 性能# 編譯(根據 CPU 核心數並行)
make -j$(nproc)
make install
# 目錄權限
chown -R mysql:mysql /usr/local/mysql
# 系統服務文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
# 配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 添加核心參數(見下)
# 初始化數據目錄 (5.7+ 用 --initialize-insecure)
/usr/local/mysql/scripts/mysql_install_db --user=mysql \
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
# 啟動服務
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
# 安全初始化
/usr/local/mysql/bin/mysql_secure_installation
/etc/my.cnf 模板[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB 核心
innodb_buffer_pool_size = 2G # 專用機 70-80% 內存
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_io_capacity = 2000
# 連接/緩存
max_connections = 2000
thread_cache_size = 100
table_open_cache = 4000
tmp_table_size = 64M
max_heap_table_size = 64M
# 慢查詢
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
# 二進制日誌
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
[client]
default-character-set = utf8mb4
socket = /tmp/mysql.sock
[mysql]
default-character-set = utf8mb4
| 問題 | 解決 |
|---|---|
| CMake 錯誤:Curses library not found | yum install ncurses-devel |
| Boost 版本不匹配 | 指定 -DWITH_BOOST=/path/to/boost_1_59_0 |
| 編譯內存不足 | swap 分區擴容或減少並行度 make -j2 |
| mysqld 無法啟動 | 檢查 datadir 權限、my.cnf 路徑、端口佔用、SELinux |
生產環境推薦:Percona Server / MariaDB 官方 RPM/DEB 包,經優化編譯、測試驗證、安全更新及時。源碼編譯適合:特定硬件優化、功能裁剪、內核參數實驗、學習內部機制。