|
在MySQL數(shù)據(jù)庫(kù)中,支持單項(xiàng)、異步復(fù)制。在復(fù)制過(guò)程中,一個(gè)服務(wù)器充當(dāng)主服務(wù)器,而另外一臺(tái)服務(wù)器充當(dāng)從服務(wù)器。如下圖所示。此時(shí)主服務(wù)器會(huì)將更新信息寫(xiě)入到一個(gè)特定的二進(jìn)制文件中。并會(huì)維護(hù)文件的一個(gè)索引用來(lái)跟蹤日志循環(huán)。這個(gè)日志可以記錄并發(fā)送到從服務(wù)器的更新中去。當(dāng)一臺(tái)從服務(wù)器連接到主服務(wù)器時(shí),從服務(wù)器會(huì)通知主服器從服務(wù)器的日志文件中讀取最后一次成功更新的位置。然后從服務(wù)器會(huì)接收從那個(gè)時(shí)刻起發(fā)生的任何更新,然后鎖住并等到主服務(wù)器通知新的更新。
這就是MySQL服務(wù)器數(shù)據(jù)庫(kù)復(fù)制原理的基本說(shuō)明。作為數(shù)據(jù)庫(kù)管理員,對(duì)于這個(gè)原理只要有幾個(gè)基本的了解即可。
實(shí)惠一:實(shí)現(xiàn)服務(wù)器負(fù)載均衡
通過(guò)服務(wù)器復(fù)制功能,可以在主服務(wù)器和從服務(wù)器之間實(shí)現(xiàn)負(fù)載均衡。即可以通過(guò)在主服務(wù)器和從服務(wù)器之間切分處理客戶(hù)查詢(xún)的負(fù)荷,從而得到更好的客戶(hù)相應(yīng)時(shí)間。通常情況下,數(shù)據(jù)庫(kù)管理員會(huì)有兩種思路。
一是在主服務(wù)器上只實(shí)現(xiàn)數(shù)據(jù)的更新操作。包括數(shù)據(jù)記錄的更新、刪除、新建等等作業(yè)。而不關(guān)心數(shù)據(jù)的查詢(xún)作業(yè)。數(shù)據(jù)庫(kù)管理員將數(shù)據(jù)的查詢(xún)請(qǐng)求全部轉(zhuǎn)發(fā)到從服務(wù)器中。這在某些應(yīng)用中會(huì)比較有用。如某些應(yīng)用,像基金凈值預(yù)測(cè)的網(wǎng)站。其數(shù)據(jù)的更新都是有管理員更新的,即更新的用戶(hù)比較少。而查詢(xún)的用戶(hù)數(shù)量會(huì)非常的多。此時(shí)就可以設(shè)置一臺(tái)主服務(wù)器,專(zhuān)門(mén)用來(lái)數(shù)據(jù)的更新。同時(shí)設(shè)置多臺(tái)從服務(wù)器,用來(lái)負(fù)責(zé)用戶(hù)信息的查詢(xún)。將數(shù)據(jù)更新與查詢(xún)分別放在不同的服務(wù)器上進(jìn)行,即可以提高數(shù)據(jù)的安全性,同時(shí)也縮短應(yīng)用程序的響應(yīng)時(shí)間、提高系統(tǒng)的性能。
二是在主服務(wù)器上與從服務(wù)器切分查詢(xún)的作業(yè)。在這種思路下,主服務(wù)器不單單要完成數(shù)據(jù)的更新、刪除、插入等作業(yè),同時(shí)也需要負(fù)擔(dān)一部分查詢(xún)作業(yè)。而從服務(wù)器的話(huà),只負(fù)責(zé)數(shù)據(jù)的查詢(xún)。當(dāng)主服務(wù)器比較忙時(shí),部分查詢(xún)請(qǐng)求會(huì)自動(dòng)發(fā)送到從服務(wù)器重,以降低主服務(wù)器的工作負(fù)荷。當(dāng)然,像修改數(shù)據(jù)、插入數(shù)據(jù)、刪除數(shù)據(jù)等語(yǔ)句仍然會(huì)發(fā)送到主服務(wù)器中,以便主服務(wù)器和從服務(wù)器數(shù)據(jù)的同步。
要在數(shù)據(jù)庫(kù)之間實(shí)現(xiàn)負(fù)載的均衡,其關(guān)鍵點(diǎn)就是數(shù)據(jù)同步的時(shí)間。如果主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的更新時(shí)間比較長(zhǎng),此時(shí)從主服務(wù)器中查詢(xún)得到的數(shù)據(jù)就會(huì)同從從服務(wù)器中得到的數(shù)據(jù)有差異。而如果同步的時(shí)間比較短,如實(shí)現(xiàn)同步復(fù)制,對(duì)網(wǎng)絡(luò)帶寬、服務(wù)器設(shè)備等就有比較高的要求。
可見(jiàn)這個(gè)同步的時(shí)間選擇直接關(guān)系到其應(yīng)用的效果。那么這個(gè)同步的時(shí)間應(yīng)該選擇多少呢?這沒(méi)有一個(gè)固定的答案。主要是看用戶(hù)的需要。如用戶(hù)對(duì)數(shù)據(jù)的及時(shí)性要求并不是很高,或者數(shù)據(jù)更新的頻率不是很高,那么這個(gè)同步的時(shí)間可以稍微長(zhǎng)一點(diǎn)。但是如果這個(gè)數(shù)據(jù)的及時(shí)性要求很高,如股票的價(jià)格等等,此時(shí)就需要能夠?qū)崿F(xiàn)同步更新。所以具體要看企業(yè)實(shí)際的應(yīng)用才能夠決定采用什么樣的同步時(shí)間。
在采取這個(gè)應(yīng)用時(shí),需要注意MySQL數(shù)據(jù)庫(kù)的復(fù)制是單向的。即只能夠?qū)?shù)據(jù)從主服務(wù)器復(fù)制到從服務(wù)器,而不能夠?qū)?shù)據(jù)從從服務(wù)器發(fā)生到主服務(wù)器。這也就是說(shuō),數(shù)據(jù)庫(kù)管理員不能夠在從服務(wù)器上更新數(shù)據(jù),否則的話(huà),就可能會(huì)與主服務(wù)器上的數(shù)據(jù)產(chǎn)生沖突。默認(rèn)情況下,系統(tǒng)會(huì)自動(dòng)利用主服務(wù)器上的數(shù)據(jù)來(lái)更新從服務(wù)器上的數(shù)據(jù)。即在從服務(wù)器上所做的任何更改,到時(shí)候都會(huì)失效。如果是用戶(hù)的請(qǐng)求,一般不用擔(dān)心。系統(tǒng)會(huì)自動(dòng)判斷用戶(hù)的請(qǐng)求是查詢(xún)請(qǐng)求還是數(shù)據(jù)更新請(qǐng)求。并自動(dòng)根據(jù)請(qǐng)求的類(lèi)型轉(zhuǎn)發(fā)到不同的服務(wù)器上。主要是數(shù)據(jù)庫(kù)管理員,不要手癢癢,手動(dòng)去更新從服務(wù)器上的數(shù)據(jù)。否則的話(huà),就會(huì)導(dǎo)致從服務(wù)器與主服務(wù)器之間數(shù)據(jù)的沖突。
實(shí)惠二:通過(guò)復(fù)制實(shí)現(xiàn)數(shù)據(jù)的異地備份
如上圖所示,可以定期的將數(shù)據(jù)從主服務(wù)器上復(fù)制到從服務(wù)器上,這無(wú)疑是先了數(shù)據(jù)的異地備份。在傳統(tǒng)的備份體制下,是將數(shù)據(jù)備份在本地。此時(shí)備份作業(yè)與數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行在同一臺(tái)設(shè)備上,當(dāng)備份作業(yè)運(yùn)行時(shí)就會(huì)影響到服務(wù)器的正常運(yùn)行。有時(shí)候會(huì)明顯的降低服務(wù)器的性能。同時(shí),將備份數(shù)據(jù)存放在本地,也不是很安全。如硬盤(pán)因?yàn)殡妷旱仍虮粨p壞或者服務(wù)器被失竊,此時(shí)由于備份文件仍然存放在硬盤(pán)上,數(shù)據(jù)庫(kù)管理員無(wú)法使用備份文件來(lái)恢復(fù)數(shù)據(jù)。這顯然會(huì)給企業(yè)帶來(lái)比較大的損失。
而如果使用復(fù)制來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的備份,就可以在從服務(wù)器上對(duì)數(shù)據(jù)進(jìn)行備份。此時(shí)不僅不會(huì)干擾主服務(wù)氣的正常運(yùn)行,而且在備份過(guò)程中主服務(wù)器可以繼續(xù)處理相關(guān)的更新作業(yè)。同時(shí)在數(shù)據(jù)復(fù)制的同時(shí),也實(shí)現(xiàn)了對(duì)數(shù)據(jù)的異地備份。除非主服務(wù)器和從服務(wù)器的兩塊硬盤(pán)同時(shí)損壞了,否則的話(huà)數(shù)據(jù)庫(kù)管理員就可以在最短時(shí)間內(nèi)恢復(fù)數(shù)據(jù),減少企業(yè)的由此帶來(lái)的損失。
在通過(guò)這種方式進(jìn)行異地備份時(shí),主要需要注意如下二個(gè)細(xì)節(jié):
一是數(shù)據(jù)更新的時(shí)間。如果要采取這種方式進(jìn)行備份,那么對(duì)于數(shù)據(jù)同步的時(shí)間,要小于等于數(shù)據(jù)備份的周期。只有如此,才能夠確保最近更新的數(shù)據(jù)被正確的備份。此時(shí)即使主服務(wù)器出現(xiàn)了故障,用戶(hù)丟失的也只是最近一個(gè)備份周期的數(shù)據(jù)。
二是從服務(wù)器上硬盤(pán)的空間。根據(jù)一般用戶(hù)的心態(tài),從服務(wù)器的配置往往比主服務(wù)器要低。但是現(xiàn)在從服務(wù)器要承擔(dān)起數(shù)據(jù)備份的任務(wù),為此對(duì)于硬盤(pán)的空間要求就要比主服務(wù)器要高。其不但要能夠存儲(chǔ)主服務(wù)器上的數(shù)據(jù),而且還要對(duì)其進(jìn)行備份。為此一般要求,從服務(wù)器上的存儲(chǔ)空間是主服務(wù)器上的兩倍。否則的話(huà),就容易出現(xiàn)磁盤(pán)空間不足而導(dǎo)致備份作業(yè)失敗。
實(shí)惠三:提高數(shù)據(jù)庫(kù)系統(tǒng)的可用性
數(shù)據(jù)庫(kù)復(fù)制功能實(shí)現(xiàn)了主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的同步,增加了數(shù)據(jù)庫(kù)系統(tǒng)的可用性。當(dāng)主服務(wù)器出現(xiàn)問(wèn)題時(shí),數(shù)據(jù)庫(kù)管理員可以馬上讓從服務(wù)器作為主服務(wù)器,用來(lái)數(shù)據(jù)的更新與查詢(xún)服務(wù)。然后回過(guò)頭來(lái)再仔細(xì)的檢查主服務(wù)器的問(wèn)題。此時(shí)一般數(shù)據(jù)庫(kù)管理員也會(huì)采用兩種手段。
一是主服務(wù)器故障之后,雖然從服務(wù)器取代了主服務(wù)器的位置,但是對(duì)于主服務(wù)器可以采取的操作仍然做了一些限制。如仍然只能夠進(jìn)行數(shù)據(jù)的查詢(xún),而不能夠進(jìn)行數(shù)據(jù)的更新、刪除等操作。這主要是從數(shù)據(jù)的安全性考慮。如現(xiàn)在一些銀行系統(tǒng)的升級(jí),在升級(jí)的過(guò)程中,只能夠查詢(xún)余額而不能夠取錢(qián)。這是同樣的道理。
二是從服務(wù)器真正變成了主服務(wù)器。當(dāng)從服務(wù)器切換為主服務(wù)器之后,其地位完全與原先的主服務(wù)器相同。此時(shí)可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢(xún)、更新、刪除等操作。為此就需要做好數(shù)據(jù)的安全性工作。即數(shù)據(jù)的安全策略,要與原先的主服務(wù)器完全相同。否則的話(huà),就可能會(huì)留下一定的安全隱患。
it知識(shí)庫(kù):從MySQL復(fù)制功能中得到一舉三得實(shí)惠,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。