首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從複寫架構部署實戰(一):核心原理與主庫配置

     編輯:MySQL 綜合教學

前言

MySQL 原生支援單向非同步複寫,是高可用、讀寫分離、備份卸載的基石。本文系列第一部分解析複寫原理、執行緒模型,並詳細記錄主庫端配置步驟。

一、複寫核心原理

  • 架構: 一主多從,非同步(主庫不等待從庫確認)。
  • 二進位日誌: 主庫將所有資料變更(DML/DDL)按順序寫入 Binlog,並維護索引檔案追蹤輪換。
  • 從庫連線: 從庫啟動後連線主庫,告知已處理的 Binlog 位置(檔名 + 偏移量)。
  • 增量同步: 主庫從該位置推送後續事件,從庫寫入中繼日誌並重放。

二、三執行緒模型

可透過 SHOW PROCESSLIST 觀察三執行緒狀態。

三、中繼日誌與狀態檔案

  • Relay Log: host_name-relay-bin.nnnnnn,格式同 Binlog,可用 mysqlbinlog 解析。SQL Thread 執行完畢自動清理。
  • Relay Log Index: host_name-relay-bin.index,追蹤目前使用的 Relay Log。
  • master.info: 記錄主庫連線資訊、已讀取的 Binlog 檔名與位置。
  • relay-log.info: 記錄已執行的 Relay Log 位置。
  • 以上檔案位於從庫 datadir,持久化保存,重啟後斷點續傳。

四、主從複寫部署前提

  1. 主從版本一致,建議最新穩定版(如 5.7/8.0)。
  2. 主庫啟用 log-bin、設定唯一 server-id。
  3. 從庫設定唯一 server-id(不可與主庫重複)。
  4. 網路互通:從庫可連線主庫 3306 埠。
  5. 主庫建立專用複寫帳號,僅授予 REPLICATION SLAVE 權限。

五、主庫端配置步驟

1. 建立複寫帳號

GRANT REPLICATION SLAVE ON *.* 
TO 'replication'@'%.yourdomain.com' IDENTIFIED BY 'slavepass';

2. 全域鎖定並備份主庫資料(冷備份基準點)

mysql> FLUSH TABLES WITH READ LOCK;
-- 保持此連線不斷開,另開終端機執行備份
shell> cd /usr/local/mysql
shell> tar -cvf /tmp/mysql-snapshot.tar ./data
# 若不需複製 mysql 系統庫,可排除:--exclude=./data/mysql

3. 記錄當前 Binlog 位置(關鍵座標)

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.003    | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

必須記錄 File 與 Position,從庫配置時需填入。

4. 釋放鎖定

mysql> UNLOCK TABLES;

六、下一步預告

下篇將詳細說明從庫配置(CHANGE MASTER TO)、啟動複寫(START SLAVE)、狀態監控(SHOW SLAVE STATUS\G)、常見錯誤排查與 GTID 模式升級指南。

結語

主庫配置的核心在於「專用帳號、全域鎖定備份、精確記錄 Binlog 座標」。這三步若有疏漏,從庫將無法正確同步或發生資料不一致。請嚴格遵循流程,並妥善保存備份檔案與 Binlog 座標記錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
執行緒所在端職責
Binlog Dump Thread主庫讀取 Binlog 發送給從庫 I/O 執行緒
I/O Thread (Slave)從庫接收事件,寫入本地 Relay Log
SQL Thread (Slave)從庫讀取 Relay Log,重放 SQL 更新資料