萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

CentOS 6.5 MySQL 5.7.12 主從復制全流程配置實戰:從前置條件到驗證測試

MySQL 主從復制是讀寫分離、異地備份、高可用架構的基石。本文基於 CentOS 6.5 + MySQL 5.7.12 (RPM 安裝),記錄從環境準備、配置文件調整、賬號授權、狀態同步到驗證測試的完整標準化流程。

架構收益與前置條件

四大核心價值

  1. 負載均衡:讀流量分流至從庫,主庫專注寫入
  2. 異地災備:從庫可部署不同 IDC,單點故障不丟數據
  3. 高可用基礎:配合 MHA/Orchestrator 實現自動故障轉移
  4. 垂直/水平拆分支撐:不同業務庫路由到不同從庫

三大硬性前提

  • MySQL 版本一致(主從大版本必同,小版本建議同)
  • 初始數據一致(全量同步或備份恢復)
  • 配置前凍結寫入(或加全局讀鎖 FLUSH TABLES WITH READ LOCK)

配置文件調整

Master (192.168.0.151) /etc/my.cnf

[mysqld]
log-bin=mysql-bin          # 必須:啟用二進制日志
server-id=151              # 必須:全局唯一,建議取 IP 末段

Slave (192.168.0.152) /etc/my.cnf

[mysqld]
log-bin=mysql-bin          # 可選:若 Slave 下掛 Slave 則必選
server-id=152              # 必須:唯一
relay-log=relay-bin        # 建議:顯式指定中繼日志名
read-only=1                # 強烈建議:防止誤寫入

重啟雙端:/etc/init.d/mysqld restart(注意服務名是 mysqld 非 mysql)

建立復制專用賬號(僅 Master 執行)

mysql -uroot -p -e "
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.* 
TO 'backup'@'192.168.0.152' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;
"

關鍵點:

  • 用 GRANT 隱式創建用戶並授權遠程登錄,而非 CREATE USER
  • 僅授權必要權限:REPLICATION SLAVE(核心)、RELOAD(FLUSH)、SUPER(CHANGE MASTER)
  • 限制來源 IP('backup'@'192.168.0.152'),拒絕通配符 %

獲取 Master 同步坐標

mysql -uroot -p -e "SHOW MASTER STATUS;"
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      154 |              |                  |
+------------------+----------+--------------+------------------+

記錄 File 和 Position,配置 Slave 時必需。

配置 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: NULLIO 線程未運行檢查 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 避免主鍵衝突
  • GTID 模式 (5.6+):MASTER_AUTO_POSITION=1 替代文件/位置,故障轉移更簡單
  • 半同步復制:rpl_semi_sync_master=ON 確保至少一從庫收到事務才提交,降低數據丟失風險
  • 多級復制:Slave 下掛 Slave 時,中間層必須開啟 log-bin 和 log-slave-updates

主從配置看似步驟多,實則邏輯清晰:開 Binlog → 建賬號 → 同步坐標 → 啟動線程 → 驗證雙 Yes。建立標準化 Runbook,讓運維從「會配」進化到「懂原理、能排錯、會演進」。

copyright © 萬盛學電腦網 all rights reserved