在MySQL數據庫中,支持單項、異步復制。在復制過程中,一個服務器充當主服務器,而另外一台服務器充當從服務器。如下圖所示。此時主服務器會將更新信息寫入到一個特定的二進制文件中。並會維護文件的一個索引用來跟蹤日志循環。這個日志可以記錄並發送到從服務器的更新中去。當一台從服務器連接到主服務器時,從服務器會通知主服器從服務器的日志文件中讀取最後一次成功更新的位置。然後從服務器會接收從那個時刻起發生的任何更新,然後鎖住並等到主服務器通知新的更新。
這就是MySQL服務器數據庫復制原理的基本說明。作為數據庫管理員,對於這個原理只要有幾個基本的了解即可。
實惠一:實現服務器負載均衡
通過服務器復制功能,可以在主服務器和從服務器之間實現負載均衡。即可以通過在主服務器和從服務器之間切分處理客戶查詢的負荷,從而得到更好的客戶相應時間。通常情況下,數據庫管理員會有兩種思路。
一是在主服務器上只實現數據的更新操作。包括數據記錄的更新、刪除、新建等等作業。而不關心數據的查詢作業。數據庫管理員將數據的查詢請求全部轉發到從服務器中。這在某些應用中會比較有用。如某些應用,像基金淨值預測的網站。其數據的更新都是有管理員更新的,即更新的用戶比較少。而查詢的用戶數量會非常的多。此時就可以設置一台主服務器,專門用來數據的更新。同時設置多台從服務器,用來負責用戶信息的查詢。將數據更新與查詢分別放在不同的服務器上進行,即可以提高數據的安全性,同時也縮短應用程序的響應時間、提高系統的性能。
二是在主服務器上與從服務器切分查詢的作業。在這種思路下,主服務器不單單要完成數據的更新、刪除、插入等作業,同時也需要負擔一部分查詢作業。而從服務器的話,只負責數據的查詢。當主服務器比較忙時,部分查詢請求會自動發送到從服務器重,以降低主服務器的工作負荷。當然,像修改數據、插入數據、刪除數據等語句仍然會發送到主服務器中,以便主服務器和從服務器數據的同步。
要在數據庫之間實現負載的均衡,其關鍵點就是數據同步的時間。如果主服務器與從服務器之間數據的更新時間比較長,此時從主服務器中查詢得到的數據就會同從從服務器中得到的數據有差異。而如果同步的時間比較短,如實現同步復制,對網絡帶寬、服務器設備等就有比較高的要求。
可見這個同步的時間選擇直接關系到其應用的效果。那麼這個同步的時間應該選擇多少呢?這沒有一個固定的答案。主要是看用戶的需要。如用戶對數據的及時性要求並不是很高,或者數據更新的頻率不是很高,那麼這個同步的時間可以稍微長一點。但是如果這個數據的及時性要求很高,如股票的價格等等,此時就需要能夠實現同步更新。所以具體要看企業實際的應用才能夠決定采用什麼樣的同步時間。
在采取這個應用時,需要注意MySQL數據庫的復制是單向的。即只能夠將數據從主服務器復制到從服務器,而不能夠將數據從從服務器發生到主服務器。這也就是說,數據庫管理員不能夠在從服務器上更新數據,否則的話,就可能會與主服務器上的數據產生沖突。默認情況下,系統會自動利用主服務器上的數據來更新從服務器上的數據。即在從服務器上所做的任何更改,到時候都會失效。如果是用戶的請求,一般不用擔心。系統會自動判斷用戶的請求是查詢請求還是數據更新請求。並自動根據請求的類型轉發到不同的服務器上。主要是數據庫管理員,不要手癢癢,手動去更新從服務器上的數據。否則的話,就會導致從服務器與主服務器之間數據的沖突。
實惠二:通過復制實現數據的異地備份
如上圖所示,可以定期的將數據從主服務器上復制到從服務器上,這無疑是先了數據的異地備份。在傳統的備份體制下,是將數據備份在本地。此時備份作業與數據庫服務器運行在同一台設備上,當備份作業運行時就會影響到服務器的正常運行。有時候會明顯的降低服務器的性能。同時,將備份數據存放在本地,也不是很安全。如硬盤因為電壓等原因被損壞或者服務器被失竊,此時由於備份文件仍然存放在硬盤上,數據庫管理員無法使用備份文件來恢復數據。這顯然會給企業帶來比較大的損失。
而如果使用復制來實現對數據的備份,就可以在從服務器上對數據進行備份。此時不僅不會干擾主服務氣的正常運行,而且在備份過程中主服務器可以繼續處理相關的更新作業。同時在數據復制的同時,也實現了對數據的異地備份。除非主服務器和從服務器的兩塊硬盤同時損壞了,否則的話數據庫管理員就可以在最短時間內恢復數據,減少企業的由此帶來的損失。
在通過這種方式進行異地備份時,主要需要注意如下二個細節:
一是數據更新的時間。如果要采取這種方式進行備份,那麼對於數據同步的時間,要小於等於數據備份的周期。只有如此,才能夠確保最近更新的數據被正確的備份。此時即使主服務器出現了故障,用戶丟失的也只是最近一個備份周期的數據。
二是從服務器上硬盤的空間。根據一般用戶的心態,從服務器的配置往往比主服務器要低。但是現在從服務器要承擔起數據備份的任務,為此對於硬盤的空間要求就要比主服務器要高。其不但要能夠存儲主服務器上的數據,而且還要對其進行備份。為此一般要求,從服務器上的存儲空間是主服務器上的兩倍。否則的話,就容易出現磁盤空間不足而導致備份作業失敗。
實惠三:提高數據庫系統的可用性
數據庫復制功能實現了主服務器與從服務器之間數據的同步,增加了數據庫系統的可用性。當主服務器出現問題時,數據庫管理員可以馬上讓從服務器作為主服務器,用來數據的更新與查詢服務。然後回過頭來再仔細的檢查主服務器的問題。此時一般數據庫管理員也會采用兩種手段。
一是主服務器故障之後,雖然從服務器取代了主服務器的位置,但是對於主服務器可以采取的操作仍然做了一些限制。如仍然只能夠進行數據的查詢,而不能夠進行數據的更新、刪除等操作。這主要是從數據的安全性考慮。如現在一些銀行系統的升級,在升級的過程中,只能夠查詢余額而不能夠取錢。這是同樣的道理。
二是從服務器真正變成了主服務器。當從服務器切換為主服務器之後,其地位完全與原先的主服務器相同。此時可以實現對數據的查詢、更新、刪除等操作。為此就需要做好數據的安全性工作。即數據的安全策略,要與原先的主服務器完全相同。否則的話,就可能會留下一定的安全隱患。