MySQL的多主多從復制(MMR)是一種復制架構,它可以支持多個主服務器,并且每個主服務器都可以有多個從服務器。在這種模式下,每個主服務器都可以寫入數(shù)據(jù)并向其他主服務器和從服務器進行廣播。同時,每個從服務器也可以讀取數(shù)據(jù),并能夠獨立處理來自不同主服務器的寫入。
在MMR環(huán)境中,每個主服務器都必須配置為master-slave架構。這些主服務器之間需要進行雙向復制,以使其數(shù)據(jù)互相同步。同時,每個從服務器也必須配置為slave,并將自己的主服務器設置為多個主服務器中的任意一個。當一個從服務器連接到它所屬的主服務器時,它會自動從主服務器中讀取該數(shù)據(jù)庫的初始快照。然后,它將通過接收和應用主服務器的二進制日志實時更新和保持與主服務器的同步。
mysql> CHANGE MASTER TO
-> MASTER_HOST='master1', MASTER_PORT=3306,
-> MASTER_USER='repl', MASTER_PASSWORD='password',
-> MASTER_AUTO_POSITION=1;
在上面的代碼中,我們使用CHANGE MASTER TO命令將從服務器配置為復制來自'master1'的數(shù)據(jù)。其中,MASTER_AUTO_POSITION選項可以告訴從服務器采用自動位移的方式來同步主服務器的更改。
在MMR環(huán)境中,如果一個主服務器崩潰,那么它可以被其他主服務器所代替,并替換成一個新的主服務器。此時,從服務器必須使用CHANGE MASTER TO命令來切換到新的主服務器。當檢測到主服務器故障時,從服務器將自動嘗試連接到另一個可用的主服務器。
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
-> MASTER_HOST='new_master', MASTER_PORT=3306,
-> MASTER_USER='repl', MASTER_PASSWORD='password',
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
在上面的代碼中,我們首先使用STOP SLAVE命令停止當前從服務器與舊主服務器的同步。然后,使用CHANGE MASTER TO命令將從服務器切換到新的主服務器。最后,使用START SLAVE命令重新啟動從服務器的同步過程。
總之,MySQL的多主多從復制是一種強大的復制架構,可以提供更好的可擴展性和高可用性。在此模式下,多個主服務器可以同時寫入數(shù)據(jù)并互相同步,而每個從服務器也可以讀取數(shù)據(jù)并獨立處理來自不同主服務器的寫入。同時,該模式還提供了一些方便的命令和選項,以使MySQL的復制過程更加穩(wěn)定和可靠。