標籤:mysql linux
(1)MySQL資料的複製
Mysq1l主從複製
MySQL資料庫支援同步複製、單向、非同步複製,在複製的過程中一個伺服器充當主伺服器,而一個或多個伺服器充當從伺服器。主伺服器將更新寫入二進位記錄檔,並維護檔案的一個索引以追蹤記錄檔迴圈。這些日誌可以記錄發送到從伺服器的更新。當一個從伺服器串連主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。
請注意當你進行複製時,所有對複製中的表的更新必須在主伺服器上進行。否則,你必須要小心,以避免使用者對主伺服器上的表進行的更新與對從伺服器上的表所進行的更新之間的衝突。
(2)MySQL資料複製的原理
MySQL複製基於主伺服器在二進位日誌中跟蹤所有對資料庫的更改(更新、刪除等等)。因此,要進行複製,必須在主伺服器上啟用二進位日誌。
每個從伺服器從主伺服器接收主伺服器已經記錄到其二進位日誌的儲存的更新,以便從伺服器可以對其資料拷貝執行相同的更新。
認識到二進位日誌只是一個從啟用二進位日誌的固定時間點開始的記錄非常重要。任何設定的從伺服器需要主伺服器上的在主伺服器上啟用二進位日誌時的資料庫拷貝。如果啟動從伺服器時,其資料庫與主伺服器上的啟動二進位日誌時的狀態不相同,從伺服器很可能失敗。
MySQL資料庫的複製需要啟動三個線程來實現:
其中1個在主伺服器上,另兩個在從伺服器上。當發出START SLAVE時,從伺服器建立一個I/O線程,以串連主伺服器並讓它發送記錄在其二進位日誌中的語句。主伺服器建立一個線程將二進位日誌中的內容發送到從伺服器。該線程可以識別為主伺服器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。從伺服器I/O線程讀取主伺服器Binlog Dump線程發送的內容並將該資料拷貝到從伺服器資料目錄中的本地檔案中,即中繼日誌。第3個線程是SQL線程,是從伺服器建立用於讀取中繼日誌並執行日誌中包含的更新。
在前面的描述中,每個從伺服器有3個線程。有多個從伺服器的主伺服器建立為每個當前串連的從伺服器建立一個線程;每個從伺服器有自己的I/O和SQL線程。
這樣讀取和執行語句被分成兩個獨立的任務。如果語句執行較慢則語句讀取任務沒有慢下來。例如,如果從伺服器有一段時間沒有運行了,當從伺服器啟動時,其I/O線程可以很快地從主伺服器索取所有二進位日誌內容,即使SQL線程遠遠滯後。如果從伺服器在SQL線程執行完所有索取的語句前停止,I/O 線程至少已經索取了所有內容,以便語句的安全拷貝儲存到本地從伺服器的中繼日誌中,供從伺服器下次啟動時執行。這樣允許清空主伺服器上的二進位日誌,因為不再需要等候從伺服器來索取其內容。
(3)可能存在的問題
延遲問題——新版本的MySQl大致可以解決該問題;更改模型,可以減少延遲
複製過程中出錯的問題——採用半同步可避免
HA叢集切換導致的問題——可用lock master
本文出自 “huangguanhua” 部落格,轉載請與作者聯絡!
Mysql主從複製