在大型網(wǎng)站系統(tǒng)的環(huán)境中,數(shù)據(jù)庫訪問壓力會非常大,一臺數(shù)據(jù)庫服務(wù)器會很快被壓垮。為了解決這個問題,我們可以采用多臺數(shù)據(jù)庫服務(wù)器共同承擔(dān)壓力的辦法,這種情況下就需要實現(xiàn)多對一的數(shù)據(jù)庫主從復(fù)制。
MySQL主從復(fù)制是指將一個MySQL數(shù)據(jù)庫的變更同步到其他的MySQL數(shù)據(jù)庫的過程。其中一臺MySQL服務(wù)器擔(dān)任主服務(wù)器(Master),其余的MySQL服務(wù)器則擔(dān)任從服務(wù)器(Slave)。
# 在主數(shù)據(jù)庫服務(wù)器上mysqld的配置文件 /etc/my.cnf 中指定服務(wù)器角色 [mysqld] log-bin=mysql-bin #開啟二進制日志,用于記錄其他數(shù)據(jù)庫的更新記錄 # 創(chuàng)建用于主從同步的賬戶和密碼。在 Master 上: CREATE USER 'repl'@'%.test.com' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.test.com';
在主服務(wù)器上需要開啟二進制日志項 log-bin,從服務(wù)器與主服務(wù)器之間的數(shù)據(jù)傳輸是通過二進制日志進行的。同時在主服務(wù)器上還需要創(chuàng)建用于主從同步的賬戶和密碼,并授權(quán)執(zhí)行 REPLICATION SLAVE 的權(quán)限。
在從服務(wù)器上需要指定需要同步的主服務(wù)器信息,包括主服務(wù)器的 IP 地址、主服務(wù)器的端口號、與主服務(wù)器通信的賬戶密碼等。
# 在從服務(wù)器上 mysql 的配置文件 /etc/my.cnf 中配置如下: [mysqld] server-id=2 # 從服務(wù)器唯一標識,不能與主服務(wù)器相同 relay-log=mysql-relay-bin # 從服務(wù)器用于存放中繼日志的位置 log-slave-updates=1 # 主從同時更新時需要開啟這個選項 # 配置從服務(wù)器連接主服務(wù)器的信息,并從主服務(wù)器中復(fù)制數(shù)據(jù) CHANGE MASTER TO MASTER_HOST='192.168.1.101', # 主服務(wù)器的 IP 地址 MASTER_PORT=3306, # 主服務(wù)器的端口號 MASTER_USER='repl', # 主從同步賬戶 MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', # 主服務(wù)器二進制日志文件名稱 MASTER_LOG_POS=107; # 主服務(wù)器二進制日志的偏移量
在從服務(wù)器上需要配置從服務(wù)器唯一標識 server-id,注意不能與主服務(wù)器相同。同時還需配置中繼日志的位置、開啟從服務(wù)器更新選項、以及從服務(wù)器連接主服務(wù)器的信息,包括主服務(wù)器的 IP 地址、端口號、主從同步的賬戶和密碼,以及復(fù)制的二進制日志文件名稱和偏移量。
最后,在完成主從復(fù)制的配置后,我們可以通過以下命令在主從服務(wù)器上檢查主從復(fù)制狀態(tài)是否正常:
# 在 Master 服務(wù)器用如下命令查看 Binary log 文件 show master status; # 在 Slave 服務(wù)器用如下命令查看 IO 和 SQL Thread 是否連接成功 SHOW SLAVE STATUS \G;
通過以上命令,可以查看主服務(wù)器的二進制日志文件名稱和偏移量,以及從服務(wù)器 IO Thread 和 SQL Thread 是否連接成功,從而檢查主從復(fù)制狀態(tài)是否正常。