1. 程式人生 > >mysql主從複製(二):主主複製,多主多從模式

mysql主從複製(二):主主複製,多主多從模式

一  簡介

     在實際的生產環境中,由單臺MySQL資料庫伺服器不能滿足實際的需求。此時資料庫叢集就很好的解決了這個問題了。採用MySQL分散式叢集,能夠搭建一個高併發、負載均衡的叢集伺服器(這篇部落格暫時不涉及)。在此之前我們必須要保證每臺MySQL伺服器裡的資料同步。資料同步我們可以通過MySQL內部配置就可以輕鬆完成,主要有主從複製和主主複製。顯然,主主複製、多主多從結構更難增強系統的穩定性及安全性。主從複製請參考我前面的博文。

二  實驗環境

     mysql5.6.16+centos6.5  32位

三  拓撲圖

     

如圖所示,master11和master10做為主節點,它們又互為主從

它們底下又可以接多個從節點,這裡就以接一個從節點為例,並假定最開始資料庫schooldb在master11上,其它節點均無資料

四  操作步驟

在master11  機器上

#  vi  /usr/my.cnf 

# log_bin
log-bin=master11_log
binlog-do-db=schooldb
log-slave-updates=1
#作為從伺服器時的中繼日誌
relay_log=school-relay-bin
#事務特性,最好設為1
sync_binlog=1

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
server_id = 11
# socket = .....

重要引數解釋:

在雙主模式中,log-slave-updates 配置項一定要配置,否則在master10上進行了更新資料,在master11和slave13上會更新,但是在slave12上不會更新

sync_binlog表示每幾次事務提交,MySQL把binlog快取刷進日誌檔案中,預設是0,最安全的是設定為1;

重啟 mysql

#service mysql  restart

登入mysql 

#mysql  -uroot  -p

建立一個用於slave和master通訊的使用者賬號

mysql>  GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY '123456'; 


重新整理許可權以避免出現拒絕訪問的情況

mysql>  flush privileges;

在master10機器上操作

#  vi  /usr/my.cnf 

# log_bin
log-bin=master10_log
binlog-do-db=schooldb
log-slave-updates=1
#作為從伺服器時的中繼日誌
relay_log=school-relay-bin
#事務特性,最好設為1
sync_binlog=1

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
server_id = 10
# socket = .....

重啟 mysql

#service mysql  restart

登入mysql 

#mysql  -uroot  -p

建立一個用於slave和master通訊的使用者賬號

mysql>  GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY 'test123'; 


重新整理許可權以避免出現拒絕訪問的情況

mysql>  flush privileges;

從節點的配置,這裡就以slave12 為例,如下圖

重啟 mysql

#service mysql  restart

這時候要鎖住master11的表,防止寫操作

執行命令 

mysql> lock tables;

接下來,匯出master11 schooldb資料庫中的資料,恢復到master10和slave12資料庫中


資料量小的話用上圖所示方法最快!當然用其它備份恢復方法都行。

分別在master11 和master10上執行show master status命令,如圖,記下File和Position引數


登入master10  執行如下命令,如圖


同理,在slave12 上也執行上面的命令

然後,在master 11上執行命令,如下圖:


這樣子,master11和master10就互為主從,即為主主模式!

然後在mstar11上解鎖表

mysql>  unlock tables;

五 驗證

在master10上把使用者表的名稱ggg改為ggg10,結果發現master11和slave12上的資料都自動更改過來了




同理,在master11上把名稱改為ggg11,master10和slave12也會自動改過來,至此,主主模式配置完成!

六   假定master10宕機,如何重新恢復並接上

在master11上停止slave, 並保證沒有新的資料進來,可以採取鎖庫鎖表的方式

mysql>   stop slave;

然後對master10進行修復恢復,恢復完畢後執行命令

mysql>  stop slave;

並將master11上的資料備份恢復到master10以保證資料一致性。

然後參考上面的步驟,用change命令互相設為主從即可

然後對master11解鎖