yum -y install gcc gcc-c++ autoconf automake zlib* flex* libxml* \
ncurses-devel libmcrypt* libtool-ltdl-devel* cmake cmake-gui \
libaio-devel bison-devel make
關鍵包:cmake(構建系統)、ncurses-devel(終端庫)、libaio-devel(異步 I/O)、bison(解析器生成器)。
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
# 或官網歷史版本頁面下載對應版本
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql5651 \
-DMYSQL_DATADIR=/usr/local/mysql5651/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make -j$(nproc) && make install
常見編譯錯誤:CMake Error at info_macros.cmake:90 (FILE): file Internal CMake error when trying to open file: .../Docs/INFO_BIN
解決:yum install -y perl-Data-Dumper或臨時修改cmake/info_bin.cmake註釋該段邏輯,重新make。
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql5651
cd /usr/local/mysql5651
scripts/mysql_install_db \
--basedir=/usr/local/mysql5651 \
--datadir=/usr/local/mysql5651/data \
--user=mysql
生成mysql系統庫、performance_schema、information_schema等核心系統表。
# 備份系統自帶 my.cnf(避免干擾)
mv /etc/my.cnf /etc/my.cnf.bak
# 複製官方樣例配置
cp support-files/my-default.cnf /etc/my.cnf
# 編輯關鍵參數
vim /etc/my.cnf
# [mysqld] 區塊添加/修改:
basedir = /usr/local/mysql5651
datadir = /usr/local/mysql5651/data
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
# 或 systemctl start mysqld (CentOS 7+)
echo 'export PATH=/usr/local/mysql5651/bin:$PATH' >> /etc/profile
source /etc/profile
mysql -uroot -p # 初始無密碼直接回車
mysql> SET PASSWORD = PASSWORD('StrongRootPass#2024');
/usr/local/mysql5651/bin/mysql_secure_installation
交互式完成:設置 root 密碼、移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫、刷新權限。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%'
IDENTIFIED BY 'RemotePass#2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# iptables
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# 或 firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
| 問題 | 解決方案 |
|---|---|
| 啟動報 "The server quit without updating PID file" | 檢查 datadir 權限、磁盤空間、my.cnf 路徑、錯誤日誌 |
| 連接報 "Can't connect to local MySQL server through socket" | 確認 socket 路徑一致、服務已啟動、客戶端指定 --socket |
| 中文亂碼 | 全鏈路 utf8mb4、my.cnf 設置 character_set_server |
| 編譯報 CMake 錯誤 | 安裝 perl 依賴、或降級 cmake 版本 |
CentOS 6.4 源碼編譯 MySQL 5.6 核心流程:**依賴包 → CMake 定制編譯 → 專用用戶權限 → 數據目錄初始化 → 配置文件部署 → 服務註冊啟動 → 安全初始化 → 防火牆放行**。關鍵點在於 CMAKE_INSTALL_PREFIX/MYSQL_DATADIR 路徑規劃、character_set_server=utf8mb4 統一編碼、mysql_install_db 正確初始化。生產環境建議優先使用官方 RPM/YUM 仓庫或 Docker 部署,源碼編譯適合深度定制或舊系統維護場景。