本文詳細記錄了在 CentOS 7 最小化安裝環境下,從源碼編譯安裝 MySQL 5.6.25 的全過程,涵蓋環境準備、源碼獲取、編譯參數配置、單實例與多實例部署、防火牆設置及常見問題排查,適合需要自定義編譯選項或學習 MySQL 底層部署的運維與開發人員。
MySQL 版本號格式如 mysql-5.6.1-m1,其中 m1 表示里程碑開發版,GA (General Availability) 則代表經過長時間測試的穩定版。生產環境強烈建議選擇 GA 版本。若需自定義存儲引擎、字符集或路徑,源碼安裝是最佳選擇。
官方下載頁:MySQL Community Server
下載 mysql-5.6.25.tar.gz 後,務必校驗 MD5:
[root@localhost src]# md5sum mysql-5.6.25.tar.gz
37664399c91021abe070faa700ecd0ed mysql-5.6.25.tar.gz
若與官網不符,請更換鏡像源重新下載。
# 查詢已安裝包
rpm -qa | grep mysql
# 強制卸載 (xxx 為包名)
rpm -e --nodeps xxx
# 刪除殘留配置
rm -f /etc/my.cnf
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper net-tools
# 1. 解壓並進入目錄
tar xvf mysql-5.6.25.tar.gz
cd mysql-5.6.25
# 2. CMake 配置 (關鍵參數解釋見下)
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/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=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
# 3. 編譯安裝 (視服務器性能耗時 10-30 分鐘)
make && make install
| 參數 | 作用 |
|---|---|
CMAKE_INSTALL_PREFIX | 安裝根目錄 |
MYSQL_DATADIR | 數據文件存放目錄 |
DEFAULT_CHARSET | 默認字符集 (強烈建議 utf8) |
WITH_INNOBASE_STORAGE_ENGINE | 啟用 InnoDB 引擎 |
SYSCONFDIR | 配置文件 my.cnf 搜索目錄 |
# 檢查用戶/組是否存在
cat /etc/passwd | grep mysql
cat /etc/group | grep mysql
# 創建無登錄權限的 mysql 用戶組與用戶
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
# 授權安裝目錄
chown -R mysql:mysql /usr/local/mysql
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
my.cnf,必須重命名 (如 my.cnf.bak),否則會干擾源碼安裝實例的配置加載。cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
# 開放 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
netstat -lntp | grep 3306多實例即一套二進制、多套配置/數據/端口,邏輯隔離、資源共享。以下以雙實例 (3306、3307) 為例:
mkdir -p /data/{3306,3307}/{data,log}
/data/3306/my.cnf)[client]
port = 3306
socket = /data/3306/mysql.sock
[mysqld]
port = 3306
socket = /data/3306/mysql.sock
pid-file = /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id = 1
# log-bin=mysql-bin
log_error = /data/3306/log/mysql-error.log
slow_query_log_file = /data/3306/log/mysql-slow.log
slow_query_log = 1
/data/3307/my.cnf 同理修改端口為 3307、server-id=3、路徑指向 3307 目錄。
/data/3306/mysql)#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"
function_start_mysql() {
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}
function_stop_mysql() {
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}
function_restart_mysql() {
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start) function_start_mysql ;;
stop) function_stop_mysql ;;
restart) function_restart_mysql ;;
*) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" ;;
esac
3307 實例腳本修改 port=3307 即可。隨後授權:
chown -R mysql:mysql /data
find /data -name mysql -exec chmod 700 {} \;
cd /usr/local/mysql/scripts
./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload
/data/3306/mysql start
/data/3307/mysql start
netstat -lntp | grep 330
# 登錄無密碼實例
mysql -S /data/3306/mysql.sock
# 修改 root 密碼 (建議在客戶端內執行,避免歷史記錄洩露)
UPDATE mysql.user SET password=PASSWORD('YourStrongPass') WHERE user='root';
FLUSH PRIVILEGES;
# 將密碼寫入管理腳本 (避免每次輸入)
sed -i 's/mysql_pwd=""/mysql_pwd="YourStrongPass"/g' /data/3306/mysql
sed -i 's/mysql_pwd=""/mysql_pwd="YourStrongPass"/g' /data/3307/mysql
/data/3306/log/mysql-error.log 或 /usr/local/mysql/data/主機名.err。my.cnf **被覆蓋**:執行 yum update 後檢查 /etc/my.cnf 是否重現,若出現立即重命名。netstat -lntp)。源碼安裝雖步驟較多,但能精確控制編譯選項、路徑佈局與多實例架構,是掌握 MySQL 部署細節的最佳實踐。生產環境建議結合 GTID 主從複製、備份策略 (xtrabackup) 及 監控告警 構建高可用集群。
項目地址:一鍵安裝腳本 (持續完善中)