首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主從複製配置完全指南:從準備到驗證的標準化部署流程

     編輯:MySQL 資料庫相關知識

架構前提

  • Master:192.0.0.1, MySQL 4.1.12
  • Slave:192.0.0.2, MySQL 4.1.18
  • 原則:**Slave 版本 ≥ Master 版本**,建議同主版本

一、Master 配置

1. 編輯 my.cnf

[mysqld]
log-bin=mysql-bin           # 必須:開啟二進制日志
server-id=1                 # 唯一正整數 1~2^32-1
binlog-do-db=extmail        # 僅記錄指定庫(可選)
binlog-ignore-db=mysql,test # 忽略系統庫(可選)

2. 創建同步賬號

GRANT REPLICATION SLAVE ON *.* TO 'abc'@'192.0.0.2' IDENTIFIED BY '123';
FLUSH PRIVILEGES;

3. 重啟並備份

service mysql restart
mysqldump --master-data extmail > extmail_backup_20071120.sql

--master-data 會在備份文件頭部寫入 CHANGE MASTER TO 位點信息。

4. 記錄 Master 狀態

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 79       | extmail      | mysql,test       |
+------------------+----------+--------------+------------------+

關鍵值:File 和 Position,Slave 配置時必需。

二、Slave 配置

1. 編輯 my.cnf

[mysqld]
server-id=2                    # 與 Master 不同
master-host=192.0.0.1          # Master IP
master-port=3306
master-user=abc
master-password=123
master-connect-retry=60        # 重連間隔秒數

2. 導入備份數據

mysqladmin create extmail
mysql extmail < extmail_backup_20071120.sql

3. 重啟並配置同步位點

service mysql restart
SLAVE STOP;
CHANGE MASTER TO
  MASTER_HOST='192.0.0.1',
  MASTER_USER='abc',
  MASTER_PASSWORD='123',
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=79;
SLAVE START;

4. 驗證同步狀態

SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.0.0.1
Master_User: abc
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 79
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_Error:
Seconds_Behind_Master: 0

成功標誌:Slave_IO_Running=Yes 且 Slave_SQL_Running=Yes,Seconds_Behind_Master=0。

三、現代版本 (5.6+) 配置差異

項目舊版 (my.cnf)新版 (SQL 動態配置)
Master 信息my.cnf 靜態配置CHANGE MASTER TO 動態配置
Relay Log自動生成可指定 relay_log 參數
GTID 模式不支持GTID_ON=ON, MASTER_AUTO_POSITION=1
多源複製不支持CHANGE MASTER TO ... FOR CHANNEL 'ch1'

四、常見故障排查

現象原因解決
IO_Running=No網絡不通/賬號密碼錯/MASTER_LOG_FILE錯ping/telnet 3306、核對賬號、重新 CHANGE MASTER
SQL_Running=No數據衝突/表結構差異/外鍵約束SHOW SLAVE STATUS\G 看 Last_Error、跳過錯誤或修復數據
Seconds_Behind_Master 偏大Slave 機能弱/大事務/長查詢阻塞優化 Slave 硬件、並行複製、binlog_format=ROW
Relay Log 損壞磁盤故障/殺進程未清理RESET SLAVE; 重新 CHANGE MASTER FROM 位點

五、生產環境最佳實踐

  1. GTID 模式:gtid_mode=ON, enforce_gtid_consistency=ON,故障轉移自動定位
  2. 半同步複製:rpl_semi_sync_master_enabled=1,數據零丟失
  3. 並行複製:slave_parallel_workers=4,提升 SQL 線程吞吐
  4. 監控告警:Seconds_Behind_Master > 300 觸發告警
  5. 定期演練:月度主從切換演練,驗證 RTO/RPO

主從複製核心三步:**Master 開 binlog + 建同步賬號、Slave 導入基線數據 + CHANGE MASTER 定位點、驗證雙 Yes 零延遲**。現代版本拥抱 GTID + 半同步 + 並行複製,構建高可用數據層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved