MySQL 主從(Master-Slave)架構是一種高可用性和可伸縮性的架構方式。在主從復制中,一個 MySQL 服務器(Master)是數據的源頭,而其他 MySQL 服務器(Slaves)則從主服務器中復制相同的數據,并在該數據上執行只讀查詢和負載均衡。
在 MySQL 主從復制架構中,所有寫操作都只在主服務器上進行,從服務器上只有讀操作。主服務器會將寫操作的 binlog 日志文件發送到從服務器,從服務器會維護一個計數器,指向從服務器執行的 binlog 日志文件的位置,并隨著從服務器的同步不斷推進計數器,在相應的位置執行讀操作,從而達到主機到從服務器的數據同步。
# 在MySQL Master服務器上設置: 1. 在my.cnf配置文件中加入以下配置: server-id = 1 log-bin = /var/log/mysql/mysql-bin.log binlog-do-db = mydb (其中 server-id 代表唯一的服務器編號; log-bin 代表 binlog 日志文件名; binlog-do-db 代表需要同步的數據庫名稱) 2. 重新啟動 MySQL 服務器。 # 在MySQL Slave服務器上設置: 1. 在my.cnf配置文件中加入以下配置: server-id = 2 replica-do-db = mydb relay-log = /var/log/mysql/mysql-relay-bin.log relay-log-index = /var/log/mysql/mysql-relay-bin.index (其中 server-id 代表唯一的服務器編號; replica-do-db 代表需要同步的數據庫名稱; relay-log 代表從服務器的 binlog 日志文件名; relay-log-index 代表從服務器 binlog 日志的索引文件名) 2. 重新啟動 MySQL 服務器。 # 驗證主從復制配置是否生效: 1. 在 MySQL Master 服務器上創建一個新的表: mysql>create database mydb; mysql>use mydb; mysql>create table mytable (id int, name varchar(20)); mysql>insert into mytable values (1, 'hello'); 2. 在 MySQL Slave 服務器上查詢該表: mysql>use mydb; mysql>select * from mytable; 當讀取到主服務器寫入的數據時,MySQL Slave 服務器會自動同步,并在執行到該語句時,在從服務器上創建相應的表和數據。
MySQL 主從復制的優點是可以通過多個從服務器實現負載均衡和數據備份,在高流量和高壓力情況下,可以通過增加從服務器的數量來減輕主服務器的壓力,提高整個數據庫的性能和可用性。同時,數據復制還可以用于恢復數據和備份數據,提高數據的保護和安全性。
但 MySQL 主從復制也存在一些不足之處,例如從服務器上的數據是通過異步復制實現的,可能存在數據同步延遲的問題;如果主服務器故障,可能需要手動進行從服務器的故障轉移;同時,在增加從服務器的數量時,需要考慮從服務器的處理能力是否足夠,或者是否需要對主從架構進行優化。