MySQL 主從復制是讀寫分離、異地備份、高可用架構的基石。本文基於 CentOS 6.5 + MySQL 5.7.12 (RPM 安裝),記錄從環境準備、配置文件調整、賬號授權、狀態同步到驗證測試的完整標準化流程。
FLUSH TABLES WITH READ LOCK)[mysqld]
log-bin=mysql-bin # 必須:啟用二進制日志
server-id=151 # 必須:全局唯一,建議取 IP 末段
[mysqld]
log-bin=mysql-bin # 可選:若 Slave 下掛 Slave 則必選
server-id=152 # 必須:唯一
relay-log=relay-bin # 建議:顯式指定中繼日志名
read-only=1 # 強烈建議:防止誤寫入
重啟雙端:/etc/init.d/mysqld restart(注意服務名是 mysqld 非 mysql)
mysql -uroot -p -e "
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.*
TO 'backup'@'192.168.0.152' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;
"
關鍵點:
GRANT 隱式創建用戶並授權遠程登錄,而非 CREATE USERREPLICATION SLAVE(核心)、RELOAD(FLUSH)、SUPER(CHANGE MASTER)'backup'@'192.168.0.152'),拒絕通配符 %mysql -uroot -p -e "SHOW MASTER STATUS;"
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 154 | | |
+------------------+----------+--------------+------------------+
記錄 File 和 Position,配置 Slave 時必需。
mysql -uroot -p -e "
CHANGE MASTER TO
MASTER_HOST='192.168.0.151',
MASTER_USER='backup',
MASTER_PASSWORD='StrongPass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
"
參數說明:MASTER_LOG_POS 無引號,數值直接填寫。
mysql -uroot -p -e "SHOW SLAVE STATUS\G"
核心指標雙 Yes 才算成功:
Slave_IO_Running: Yes # IO 線程:連接 Master、拉取 Binlog
Slave_SQL_Running: Yes # SQL 線程:重放 Relay Log、回放事務
Seconds_Behind_Master: 0 # 延遲秒數,0 為實時
| 現象 | 常見原因 | 排查命令 |
|---|---|---|
| Slave_IO_Running: Connecting | 網絡不通、賬號密碼錯、Master 防火牆、MASTER_LOG_FILE/POS 錯 | telnet master 3306; SHOW MASTER STATUS |
| Slave_SQL_Running: No | 重放報錯(主鍵衝突、表結構差異、外鍵失敗) | Last_SQL_Error; SHOW RELAYLOG EVENTS |
| Seconds_Behind_Master: NULL | IO 線程未運行 | 檢查 Slave_IO_Running |
-- Master 執行
CREATE DATABASE db_test_slave;
USE db_test_slave;
CREATE TABLE tb_test(id INT(3), name VARCHAR(50));
INSERT INTO tb_test VALUES(1,'hello slave');
-- Slave 驗證
mysql -uroot -p -e "USE db_test_slave; SELECT * FROM tb_test;"
+------+-------------+
| id | name |
+------+-------------+
| 1 | hello slave |
+------+-------------+
auto_increment_offset/increment 避免主鍵衝突MASTER_AUTO_POSITION=1 替代文件/位置,故障轉移更簡單rpl_semi_sync_master=ON 確保至少一從庫收到事務才提交,降低數據丟失風險log-bin 和 log-slave-updates主從配置看似步驟多,實則邏輯清晰:開 Binlog → 建賬號 → 同步坐標 → 啟動線程 → 驗證雙 Yes。建立標準化 Runbook,讓運維從「會配」進化到「懂原理、能排錯、會演進」。