MySQL作為一種重要的關(guān)系型數(shù)據(jù)庫,其高可用性已經(jīng)成為不少企業(yè)所關(guān)注的問題之一,而主從復(fù)制就是MySQL高可用性的一個(gè)重要方面。主從復(fù)制的核心是:將一個(gè)MySQL數(shù)據(jù)庫的數(shù)據(jù)從一個(gè)服務(wù)器復(fù)制到另一個(gè)或多個(gè)服務(wù)器,并在每個(gè)從服務(wù)器上保持一致。所以,在MySQL的集群中,主從復(fù)制到底是如何實(shí)現(xiàn)的呢?
首先,我們需要做的就是在主數(shù)據(jù)庫上創(chuàng)建一個(gè)從數(shù)據(jù)庫的賬號(hào),并將訪問權(quán)限分配到從服務(wù)器上。
GRANT REPLICATION SLAVE ON *.* TO 'slaveUser'@'slaveHost' IDENTIFIED BY 'slavePassword'; FLUSH PRIVILEGES;
同時(shí),確保主服務(wù)器的日志文件和日志位置都被啟用:
[mysqld] log-bin=/var/lib/mysql/mysql-bin.log binlog-do-db=myDatabase binlog-ignore-db=mysql server-id=1
在從數(shù)據(jù)庫上,需要做的就是配置它作為從服務(wù)器,并將主服務(wù)器的信息告訴它。我們可以通過以下命令來添加從服務(wù)器:
CHANGE MASTER TO MASTER_HOST='masterHost', MASTER_USER='slaveUser', MASTER_PASSWORD='slavePassword', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
接下來,我們可以啟動(dòng)從服務(wù)器。
當(dāng)主數(shù)據(jù)庫宕機(jī)時(shí),從數(shù)據(jù)庫將會(huì)嘗試重新連接到新的主數(shù)據(jù)庫上。可以通過以下命令在從服務(wù)器上重新連接到新的主服務(wù)器:
CHANGE MASTER TO MASTER_HOST='newMasterHost', MASTER_USER='slaveUser', MASTER_PASSWORD='slavePassword', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107; START SLAVE;
通過上述方式,主從切換就完成了。注意,當(dāng)進(jìn)行主從切換時(shí),需要確保新的主服務(wù)器上數(shù)據(jù)的正確性,否則可能會(huì)導(dǎo)致數(shù)據(jù)的丟失或不一致。