1. 程式人生 > >MySQL複製原理及過程

MySQL複製原理及過程



Replication基本原理
非同步複製:從主機拷貝到備機過程中會有延遲,延遲通常由網路、資源可用性和系統負載來決定。使用合適架構和調優,大多複製幾乎是瞬間完成的。
同步複製:資料同時向一臺或多臺機器提交,保證多系統一致性,但也會帶來額外效能損失,mysql本身不支援同步複製,利用分散式複製塊裝置技術能提供同步複製功能。
半同步複製:MySQL5.5新功能,主機提交半同步到從機,從機收到事務所有事件後返回給主機確認該事務提交完成或超時。當發生超時,主機會使用非同步複製。半同步複製保障主機所有已提交事務都被複制到從機。
基於語句的複製:MySQL預設使用基於語句的複製方式。優點在於最終寫入日誌檔案的資料較少,當更新刪除時,日誌檔案佔用非常少儲存空間,也意味著恢復資料能最快。缺點是不支援一些非確定性行為,例如當前時間函式。
基於行的複製:MySQL5.1引入新功能,記錄表中改變的資料,與基於語句方式相反。更像關係傳統複製,通常不需要鎖請求。優點獲得更高的併發,缺點是日誌檔案會較大。
混合格式複製:MySQL5.1.8引入新功能,二進位制日誌格式能夠實時改變,預設基於語句複製,當遇到以下情況自動切換到基於行的模式:
NDB儲存引擎的DML操作;
使用uuid()函式;
兩個以上的表中有auto_increment屬性的列被更新;
任何insert delayed被執行;
呼叫UDF(使用者定義函式);
當檢視內容使用基於行復制,則建立檢視的語句也使用此方式,例如使用uuid()函式建立檢視時。


Replication使用案例
水平擴充套件:目的是使負載分散到一個或多個從機,以提高效能。垂直擴充套件是在主機天津硬體資源,水平擴充套件是新增伺服器。在水平擴充套件架構中,讀寫操作可以分離到主機和從機上。
高可用性:將改變的資料複製到從機,目的是解決當前主機發生錯誤、崩潰或維護,需要從主機下線時系統遷移到從機。
資料備份:避免資料備份時給主機帶來效能下降或鎖開銷,可以選擇從機替代主機執行備份操作。
線上分析:許多商業智慧和查詢分析工作需要佔用大量主機資源並且比較耗時。對於這種情況,使用從機提供查詢分析服務。
異地複製:不同地理位置的資料庫之間實現遠距離資料複製。非同步複製在這種場景能更好解決網路延遲帶來的影響。


Replication拓撲結構
Master to Slave :管理配置最簡單的方式,一臺做主機另一臺做從機。
Master to Multiple Slaves :這種方式有更好的水平擴充套件能力,同時增加了管理的複雜性和複製失敗解決問題的潛在風險。
Master to Slaves to Slaves :主多從的一種擴充套件,從機被另外一些從機作為主機。
Master to Master(Master - Master) :兩臺伺服器結合一起,互為主從。這種配置使寫操作在兩個系統之間更好的被複制,但也明顯地提高了在安裝,配置和管理的複雜程度。
Master-Master to Slave :這種複製拓撲結構當前是不被MySQL所支援的。在多主配置環境下,通常是兩臺作主機,從機要從這兩臺主機複製資料。


Replication內部工作流程
MySQL複製,主機將更新寫入二進位制日誌檔案,並對日誌維護一個索引,保持日誌輪流跟蹤。日誌作為更新記錄傳送到從機。當從機連線到主機時,會檢查日誌最後一次更新成功最近位置。然後接受自那時以來的所有更新,之後從機便等待主機通知新的更新。


Replication配置


建立複製使用者:該帳戶給予“REPLICATION  SLAVE”許可權,專門用於複製,不授予複製許可權以外的其他許可權。
GRANT  REPLICATION  SLAVE  ON  *.*  TO  'replication_user'@'%’ IDENTIFIED BY 'password' ; 
FLUSH  PRIVILEGES;
2.  重新整理表和阻塞寫操作:在主機重新整理所有表並阻塞寫操作。設定讀鎖: FLUSH TABLES WITH READ LOCK;
3.  記錄主機二進位制日誌位置:可以使用SHOW MASTER STATUS;
4.  修改從機my.conf檔案並重啟: my.conf 中 [mysqld] 段加入 server-id=2,ID值必須是1-232之間,必須和主機不同。複製通訊      中ID值是每個伺服器的唯一標識。重啟從機MySQL服務,新配置就會生效。
5.  初始化複製:
Slave stop;
下一步,執行 change master命令:
CHANGE MASTER TO MASTER_HOST=’192.168.0.81’, 
MASTER_USER=’replication_user’, 
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’dellxp1-bin.000001’, 
MASTER_LOG_POS=2462;


Replication管理和排錯
1.  檢查複製狀態: SHOW SLAVE STATUS
2.  停止從機讀取二進位制日誌:  STOP SLAVE;  (從機的IO執行緒不會讀取主機二進位制日誌,SQL執行緒不會執行中繼日誌的事件。)
     單獨停止IO或SQL執行緒指定執行緒型別: STOP SLAVE IO_THREAD;
3.  啟動從機讀取二進位制日誌:START SLAVE; 可以單獨啟動IO或SQL執行緒


使用mysqlbinlog工具檢視二進位制日誌


***********************************************************************************************************


master mysql> FLUSH TABLES WITH READ LOCK; 阻止更新
master mysql> SHOW MASTER STATUS;檢視複製狀態
slave mysql> SELECT MASTER_POS_WAIT('log_name', log_pos);
slave mysql> UNLOCK TABLES;




CHANGE MASTER TO MASTER_HOST='192.168.11.10',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-master-bin.000003',MASTER_LOG_POS=120;