MySQL主從復(fù)制指的是在多臺MySQL服務(wù)器之間建立一種“主從”關(guān)系,即在一臺服務(wù)器上將數(shù)據(jù)庫記錄更改同步到其他幾臺服務(wù)器上。這種機制可以實現(xiàn)數(shù)據(jù)備份、負(fù)載均衡、讀寫分離等功能,十分實用。下面我們將詳細(xì)介紹MySQL如何實現(xiàn)主從復(fù)制。
首先,我們需要設(shè)置一臺MySQL服務(wù)器作為“主服務(wù)器”,其他服務(wù)器作為“從服務(wù)器”。
# 主服務(wù)器配置 [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = dbname
在主服務(wù)器的MySQL配置文件my.cnf中,需要設(shè)置server-id為1,表示這是主服務(wù)器。同時,我們需要開啟二進(jìn)制日志功能,將結(jié)果記錄到mysql-bin.log中,以便從服務(wù)器通過讀取該文件來完成數(shù)據(jù)同步。binlog_do_db選項表示只記錄某個數(shù)據(jù)庫中的操作。
# 從服務(wù)器配置 [mysqld] server-id = 2 replicate-do-db = dbname
在從服務(wù)器的配置文件中,需要設(shè)置不同的server-id。replicate-do-db表示只從主服務(wù)器同步指定的數(shù)據(jù)庫,防止同步不必要的數(shù)據(jù)。
接下來,我們需要在主服務(wù)器上創(chuàng)建一個用于同步的用戶。
CREATE USER 'sync_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'sync_user'@'%';
這段代碼創(chuàng)建了一個IP地址為任意的同步用戶,并授權(quán)其具有從服務(wù)器的權(quán)限。接下來,在從服務(wù)器上進(jìn)行連接操作。
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_PORT=3306, MASTER_USER='sync_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
此時,從服務(wù)器就已經(jīng)連接上了主服務(wù)器。MASTER_LOG_FILE和MASTER_LOG_POS的值需要和主服務(wù)器的一致,以便從服務(wù)器能夠恢復(fù)到和主服務(wù)器一致的狀態(tài)。
現(xiàn)在,我們啟動從服務(wù)器的復(fù)制功能。
START SLAVE;
從服務(wù)器現(xiàn)在將開始同步主服務(wù)器上的數(shù)據(jù),可以使用SHOW SLAVE STATUS命令來查看同步狀態(tài)。
SHOW SLAVE STATUS\G
這條命令可以查看當(dāng)前從服務(wù)器的復(fù)制狀態(tài),包括主服務(wù)器的地址、同步位置等信息。如果出現(xiàn)問題,需要進(jìn)行故障排除。
除此以外,還可以通過設(shè)置主從同步的復(fù)制模式來實現(xiàn)讀寫分離、負(fù)載均衡等功能。MySQL主從復(fù)制是一個非常實用的功能,在分布式數(shù)據(jù)庫中具有十分廣泛的應(yīng)用。