雖然 CentOS 6 已停止維護,但存量系統仍存。本文記錄 **最小化安裝 CentOS 6.3 → 編譯安裝 MySQL 5.6.15 (CMake) → 虛擬機克隆 → 配置 GTID/傳統主從複制** 全流程,含依賴安裝、CMake 參數解析、權限設定、主從驗證與避坑指南。
chkconfig iptables off、service iptables stop
yum install -y gcc gcc-c++ ncurses-devel perl cmake
# CMake 2.8.10+(源碼安裝或 yum)
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
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /usr/local/mysql /data/mysqldb
chown -R mysql:mysql /usr/local/mysql /data/mysqldb
wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.15.tar.gz
tar -xzf mysql-5.6.15.tar.gz && cd mysql-5.6.15
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/data/mysqldb \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1
make -j$(nproc) && make install
| 參數 | 含義 |
|---|---|
| CMAKE_INSTALL_PREFIX | 安裝根目錄 |
| MYSQL_UNIX_ADDR | Socket 檔案路徑 |
| DEFAULT_CHARSET/COLLATION | 預設字符集/校對規則 |
| WITH_*_STORAGE_ENGINE=1 | 靜態編譯指定引擎(InnoDB、Archive、Blackhole) |
| MYSQL_DATADIR | 資料目錄 |
| MYSQL_TCP_PORT | 監聽端口 |
| ENABLE_DOWNLOADS=1 | 下載 GMock 等測試依賴(可選) |
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql --datadir=/data/mysqldb
cp support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 確認 datadir=/data/mysqldb
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root password '123456'
hostname mysql42
# 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 → IP=192.168.1.42
rm /etc/udev/rules.d/70-persistent-net.rules # 關鍵:清除網卡綁定
reboot
cd /data/mysqldb
vi auto.cnf
# 修改 server-uuid 任意幾位(如 0→1, 2→a),確保全域唯一
# /etc/my.cnf
server-id = 1
log-bin = mysql-bin
# 重啟
service mysqld restart
mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'repl_pass123';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
# 記錄 File、Position(如 mysql-bin.000001, 120)
# /etc/my.cnf
server-id = 42
log-bin = mysql-bin # 可選,建議開啟支援鏈式
service mysqld restart
mysql -uroot -p123456
CHANGE MASTER TO
MASTER_HOST='192.168.1.41',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_pass123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120;
START SLAVE;
SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
```
**兩個 Yes 缺一不可**,否則檢查 Last_IO_Error / Last_SQL_Error。
| 坑點 | 現象 | 解決 |
|---|---|---|
| 克隆後 server-uuid 重複 | SHOW SLAVE STATUS 顯示 Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs | 修改從庫 auto.cnf server-uuid |
| 防火牆攔截 3306 | 從庫連不上主庫 | chkconfig iptables off / 安全組放行 |
| SELinux 阻擋 | mysqld 無法讀寫 datadir | setenforce 0 或配置正確 context |
| 權限不足 | GRANT 後未 FLUSH PRIVILEGES | 必須 FLUSH PRIVILEGES |
| 字符集不一致 | 主從資料亂碼 | 主從 my.cnf 統一 character-set-server=utf8 |
編譯安裝 MySQL 5.6 核心在於 **CMake 參數正確、目錄權限正確、my.cnf datadir 指向正確**。主從複制核心在於 **Server ID 唯一、Binlog 開啟、複制用戶權限正確、GTID/File+Position 定位準確、server-uuid 不衝突**。將上述步驟封裝為 Shell/Ansible 腳本,可實現批量部署與版本化管理。