資料內(nèi)容:
2、讀寫分離配置
我們要注意,目前我們的這個MySQL主從集群是單向的,也就是只能從主服務(wù)同
步到從服務(wù),而從服務(wù)的數(shù)據(jù)表更是無法同步到主服務(wù)的。
所以,在這種架構(gòu)下,為了保證數(shù)據(jù)一致,通常會需要保證數(shù)據(jù)只在主服務(wù)上
寫,而從服務(wù)只進行數(shù)據(jù)讀取。這個功能,就是大名鼎鼎的讀寫分離。但是這里要
注意下,mysql主從本身是無法提供讀寫分離的服務(wù)的,需要由業(yè)務(wù)自己來實現(xiàn)。
這也是我們后面要學的ShardingSphere的一個重要功能。
到這里可以看到,在MySQL主從架構(gòu)中,是需要嚴格限制從服務(wù)的數(shù)據(jù)
寫入的,一旦從服務(wù)有數(shù)據(jù)寫入,就會造成數(shù)據(jù)不一致。并且從服務(wù)在
執(zhí)行事務(wù)期間還很容易造成數(shù)據(jù)同步失敗。
如果需要限制用戶寫數(shù)據(jù),我們可以在從服務(wù)中將read_only參數(shù)的值設(shè)
為1( set global read_only=1; )。這樣就可以限制用戶寫入數(shù)據(jù)。
但是這個屬性有兩個需要注意的地方:
1、read_only=1設(shè)置的只讀模式,不會影響slave同步復制的功能。 所
以在MySQL slave庫中設(shè)定了read_only=1后,通過 "show slave
status\G" 命令查看salve狀態(tài),可以看到salve仍然會讀取master上的日
志,并且在slave庫中應(yīng)用日志,保證主從數(shù)據(jù)庫同步一致;
2、read_only=1設(shè)置的只讀模式, 限定的是普通用戶進行數(shù)據(jù)修改的操
作,但不會限定具有super權(quán)限的用戶的數(shù)據(jù)修改操作。 在MySQL中設(shè)
置read_only=1后,普通的應(yīng)用用戶進行insert、update、delete等會
產(chǎn)生數(shù)據(jù)變化的DML操作時,都會報出數(shù)據(jù)庫處于只讀模式不能發(fā)生數(shù)
據(jù)變化的錯誤,但具有super權(quán)限的用戶,例如在本地或遠程通過root用
戶登錄到數(shù)據(jù)庫,還是可以進行數(shù)據(jù)變化的DML操作; 如果需要限定
super權(quán)限的用戶寫數(shù)據(jù),可以設(shè)置super_read_only=0。另外 如果要
想連super權(quán)限用戶的寫操作也禁止,就使用"flush tables with read
lock;",這樣設(shè)置也會阻止主從同步復制!
3、其他集群方式
我們到這里搭建出了一個一主一從的MySQL主從同步集群,具有了數(shù)據(jù)同步的基
礎(chǔ)功能。而在生產(chǎn)環(huán)境中,通常會以此為基礎(chǔ),根據(jù)業(yè)務(wù)情況以及負載情況,搭建
更大更復雜的集群。
例如為了進一步提高整個集群的讀能力,可以擴展出一主多從。而為了減輕主節(jié)
點進行數(shù)據(jù)同步的壓力,可以繼續(xù)擴展出多級從的主從集群。
為了提高整個集群的高可用能力,可以擴展出多主的集群。
我們也可以擴展出互為主從的互主集群甚至是環(huán)形的主從集群,實現(xiàn)MySQL多活
部署。
搭建互主集群只需要按照上面的方式,在主服務(wù)上打開一個slave進程,并且指向
slave節(jié)點的binlog當前文件地址和位置。