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解鎖