1. 程式人生 > >MySQL   主從復制

MySQL   主從復制

mysql 主從復制

企業Linux運維場景數據同步方案

1.1 文件級別的異機同步方案

  • scp/sftp/nc命令可以實現遠程數據同步。

  • 搭建ftp/http/svn/nfs 服務器,然後在客戶端上也可以把數據同步到服務器。

  • 搭建Samba文件共享服務,然後在客戶端上也可把數據同步到服務器。

  • 利用rsync/csync2/union等均可實現數據同步。

提示:union可實現雙向同步,csync2可實現多機同步。以上文件同步方式如果結合定時任何或者inotify,sersync等功能,可以實現定時及實時的數據同步。

  • 擴展思想:文件級別也可利用mysql,mongodb等軟件作為容器實現。

  • 擴展思想:程序向兩個服務器同時寫數據,雙寫就是一個同步機制。

特點:簡單,方便,效率和文件系統級別要差一些,但是被同步的節點可以提供訪問。軟件的自身同步機制(MySQLoraclemongdb,ttserver,redis…,文件放到數據庫,同步到從庫,再把文件拿出來。

1.2 文件系統級別異機同步方案

1.2.1drbd同步數據

DRBD基於文件系統同步,相當於網絡raid1,可以同步幾乎任何業務數據。MySQL數據庫的官方推薦DRBD同步數據,所有單點服務例如:NFS,MFS(DRBD),MYSQL等都可以用DRBD

1.2.2數據庫同步方案

2.1 MySQL主從復制

MySQL的主從復制方案,和上述文件及文件系統級別同步是類似的,都是數據的傳輸。只不過

MySQL無需借助第三方工具,而是其自帶的同步復制功能,另外一點,MySQL的主從復制不是磁盤上文件直接同步,而是邏輯的binlog日誌同步到本地在應用執行的過程。

2.1.1 MySQL主從復制介紹

MySQL數據庫支持單向,雙向,鏈式級聯等不同場景的復制。在復制過程中,一臺服務器充當主服務器(master),而一個或多個其他的服務器充當從服務器(salve)。

復制可是單向的:MèS,也可是雙向MóM,當然也可以多M環狀同步等。

如果設置了鏈式級聯復制,那麽,從(slave)服務器本身除了充當從服務器外,也會同時充當其下面從服務器的主服務器。

技術分享

  1. 單向主從復制邏輯圖,此架構只能在master端進行數據寫入。

  2. 雙向同步邏輯圖,此架構可以在master端或master2端進行數據寫入。

技術分享

3.線性級聯單向雙主同步邏輯圖,此架構只能在master端進行數據寫入。


2.1.2 MySQL主從復制原理介紹

MySQL的主從復制是一個異步的復制過程(雖然一般情況下感覺是實時的),數據將從一個mysql數據庫(master)復制到另一個MySQL數據庫(slave),在masterslave之間實現整個主從復制的過程是有三個線程參與完成的。其中有兩個線程(SQLIO線程)在slave端,另外一個線程(I/O線程)在master端。

要實現MySQL的主從復制,首先必須打開masterbinlog記錄功能,否則就無法實現。因為整個復制過程實際上就是slavemaster端獲取binlog日誌,然後再在slave上以相同順序執行獲取的binlog日誌中所記錄的各種SQL操作。

技術分享


2.1.3 主從復制應用場景

應用場景1:從服務器作為主服務器的實時數據備份

主從復制架構的設置,可以大大加強MySQL數據庫架構的健壯性。例如:當主服務器出現問題時,我們可以人工或設置自動切換到從服務器繼續提供服務,此時從服務器的數據和宕機時的主數據庫幾乎是一致的。

這類似NFS存儲數據通過inotify+rsync同步到備份的NFS服務器,只不過MySQL的復制方案是其自帶的工具。

利用MySQL的復制功能做數據備份時,在硬件故障,軟件故障的場景下,該數據備份時有效的,但對於人為的執行dropdelete等語句刪除數據的情況,從庫的備份功能就沒有用了,因為從服務器也會執行刪除的語句。

應用場景2:主從服務器實現讀寫分離,從服務器實現負載均衡

主從服務器架構可通過程序(PHPJava等)或代理軟件(MySQL-proxyamoeba)實現對用戶(客戶端)的請求讀寫分離,即讓從服務器僅僅處理用戶的select查詢請求,降低用戶查詢響應時間及讀寫同時在主服務器上帶來的訪問壓力。對於更新的數據(例如updateinsertdelete語句)仍然交給主服務器處理,確保主服務器和從服務器保持實時同步。

應用場景3:把多個從服務器根據業務重要性進行拆分訪問

可以把幾個不同的從服務器,根據公司的業務進行拆分。例如:有為外部用戶提供查詢服務的從服務器,有內部DBA用來數據備份的從服務器,還有為公司內部人員提供訪問的後臺,腳本,日誌分析及供開發人員查詢使用的從服務器。這樣的拆分除了減輕主服務器的壓力外,還可以使數據庫對外部用戶瀏覽,內部用戶業務處理及DBA人員的備份等互不影響。



2.1.4 主從復制原理小結

主從復制是異步的邏輯的SQL語句級的復制。

復制時,主庫有一個I/O線程,從庫有兩個線程,I/OSQL線程。

實現主從復制的必要條件是主庫要開啟記錄binlog功能。

作為復制的所有MySQL節點的sever-id都不能相同。

binlog文件只記錄對數據庫有更改的SQL語句(來自主數據庫內容的變更),不記錄任何查詢(selectshow)語句。


MySQL 主從復制