MySQL服務(wù)器作為一個(gè)開源的數(shù)據(jù)庫(kù)系統(tǒng),在使用過程中會(huì)遇到需要將其復(fù)制到其他機(jī)器的情況,這時(shí)候我們就需要了解如何復(fù)制MySQL Server了。下面是各種復(fù)制方式以及它們所適用的場(chǎng)景:
1、Mysql Master-Slave復(fù)制。該方式適用于讀寫分離的場(chǎng)景。在該復(fù)制結(jié)構(gòu)中,有一個(gè)主數(shù)據(jù)庫(kù),多個(gè)從數(shù)據(jù)庫(kù)。主數(shù)據(jù)庫(kù)向從數(shù)據(jù)庫(kù)推送數(shù)據(jù),從數(shù)據(jù)庫(kù)只負(fù)責(zé)讀取數(shù)據(jù),無法進(jìn)行寫操作。其中主數(shù)據(jù)庫(kù)使用Binary Log記錄在該數(shù)據(jù)庫(kù)內(nèi)所執(zhí)行的操作語句,從數(shù)據(jù)庫(kù)會(huì)對(duì)該Binary Log進(jìn)行定期的輪詢式觸發(fā)復(fù)制操作。復(fù)制過程中從數(shù)據(jù)庫(kù)會(huì)在自己的Redo Log中保存主數(shù)據(jù)庫(kù)在集群中所產(chǎn)生的變更歷史,從而保證數(shù)據(jù)的一致性。
2、MySQL Master-Master復(fù)制。該種復(fù)制方式適用于數(shù)據(jù)讀寫、數(shù)據(jù)寫多的場(chǎng)景。該結(jié)構(gòu)中,主數(shù)據(jù)庫(kù)是可以互相推送和復(fù)制數(shù)據(jù)的,所以數(shù)據(jù)能夠在所有主數(shù)據(jù)庫(kù)之間保持一致。主數(shù)據(jù)庫(kù)之間通過Binary Log的方式進(jìn)行數(shù)據(jù)同步。當(dāng)其中一個(gè)主數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí),集群中的其他主數(shù)據(jù)庫(kù)可以繼續(xù)工作,保證了數(shù)據(jù)的可用性。
除此之外,MySQL還提供了多種復(fù)制方式供用戶選擇,例如雙機(jī)冗余、雙機(jī)熱備等,用戶可根據(jù)不同情況選擇適合自己的復(fù)制方式。
示例代碼: CREATE USER 'replicant'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; CHANGE MASTER TO MASTER_HOST='master.example.com', MASTER_USER='replicant', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.0001', MASTER_LOG_POS=829;