mysql主從復制是基于日志的數(shù)據(jù)同步機制,通過主庫記錄binary log、從庫讀取并重放日志實現(xiàn)數(shù)據(jù)一致。具體步驟為:1.主庫寫入數(shù)據(jù)生成binary log;2.從庫連接主庫請求日志更新;3.主庫發(fā)送日志內容;4.從庫寫入relay log;5.sql線程執(zhí)行日志語句。配置關鍵點包括:1.主庫開啟binlog并設置唯一server-id;2.創(chuàng)建復制賬號并授權;3.獲取主庫binlog位置;4.配置從庫server-id和relay log;5.啟動復制線程。主從復制支持故障切換、讀寫分離和熱備恢復,但需配合mha、orchestrator等工具實現(xiàn)高可用。常見問題如復制中斷、數(shù)據(jù)不一致、延遲過大可通過錯誤排查、跳過事務或重新初始化解決。維護中需持續(xù)監(jiān)控以確保穩(wěn)定性。
在 mysql 數(shù)據(jù)庫系統(tǒng)中,主從復制是一種非常常見的數(shù)據(jù)同步機制。它通過將一個數(shù)據(jù)庫服務器(主庫)的數(shù)據(jù)變更操作復制到另一個或多個數(shù)據(jù)庫服務器(從庫),實現(xiàn)數(shù)據(jù)冗余和負載分擔。對于追求高可用、可擴展的數(shù)據(jù)庫架構來說,主從復制是基礎也是關鍵的一環(huán)。
主從復制的基本原理
MySQL 的主從復制本質上是基于日志的復制機制。主庫會把所有的寫操作記錄到二進制日志(binary log)中,從庫則通過讀取這些日志并重放(replay)其中的操作,來保持與主庫的數(shù)據(jù)一致性。
這個過程大致分為以下幾個步驟:
- 主庫寫入數(shù)據(jù)時生成 binary log
- 從庫連接主庫并請求 binary log 的更新內容
- 主庫將日志內容發(fā)送給從庫
- 從庫將接收到的日志寫入自己的 relay log
- SQL 線程讀取 relay log 并執(zhí)行相應語句
這種方式保證了從庫能“追上”主庫的數(shù)據(jù)狀態(tài),但也會因為網絡延遲、負載壓力等因素導致一定時間內的數(shù)據(jù)不一致。
配置主從復制的關鍵步驟
要完成主從復制配置,有幾個核心點需要設置清楚:
-
主庫開啟 binlog 并設置 server-id
- 修改 my.cnf 文件:
server-id=1 log-bin=mysql-bin
- 修改 my.cnf 文件:
-
創(chuàng)建用于復制的賬號
- 在主庫執(zhí)行:
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 在主庫執(zhí)行:
-
獲取主庫當前 binlog 位置
- 執(zhí)行 SHOW MASTER STATUS; 記錄當前文件名和位置
-
配置從庫的 server-id 和連接信息
- 修改 my.cnf:
server-id=2 relay-log=mysql-relay-bin
- 啟動復制線程:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE;
- 修改 my.cnf:
需要注意的是:server-id 每臺機器必須不同,否則復制會失??;另外,主從之間的網絡必須通順,防火墻也要開放相應端口。
主從復制在高可用中的應用
主從復制本身并不能直接提供高可用性,但它為高可用方案提供了基礎支持。比如:
- 故障切換(Failover):當主庫宕機時,可以快速將其中一個從庫提升為主庫,繼續(xù)對外服務。
- 讀寫分離:將讀請求分散到多個從庫上,減輕主庫壓力,提高整體性能。
- 備份恢復:從庫可以作為熱備使用,在主庫出現(xiàn)問題時迅速恢復數(shù)據(jù)。
但在實際部署中,還需要配合一些工具或機制來實現(xiàn)自動切換,例如使用 MHA(Master High Availability)、Orchestrator 或者云平臺提供的高可用組件。
此外,主從復制存在一定的延遲風險。如果業(yè)務對數(shù)據(jù)實時性要求很高,可能需要引入半同步復制(Semisynchronous Replication)或者 GTID 來減少數(shù)據(jù)丟失的可能性。
常見問題與排查建議
主從復制配置完成后,并不是一勞永逸的,日常維護中可能會遇到以下問題:
- 復制中斷:可以通過 SHOW SLAVE STATUSG 查看是否有錯誤信息,如 SQL 錯誤、連接超時等。
- 數(shù)據(jù)不一致:定期做數(shù)據(jù)校驗,比如使用 pt-table-checksum 工具檢查主從一致性。
- 延遲過大:優(yōu)化從庫性能,比如增加索引、調整硬件資源,或者考慮拆分讀壓力。
遇到復制錯誤時,一般處理流程如下:
- 確認錯誤類型(SQL 報錯、IO 報錯)
- 如果是偶發(fā)性錯誤,嘗試跳過錯誤事務:
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
- 如果數(shù)據(jù)已經出現(xiàn)偏差,可能需要重新初始化從庫
基本上就這些。主從復制雖然配置不算復雜,但涉及細節(jié)多,容易忽略的地方也不少。尤其是在生產環(huán)境中,不僅要配置好,還要持續(xù)監(jiān)控和維護,才能真正發(fā)揮它的作用。