標籤:
mysql replication是mysql一個很重要的功能,主要用於主伺服器和從伺服器之間的資料複製操作。
mysql複製是指從一個mysql主伺服器(master)將資料複製到另一台或者多台mysql從伺服器(salves)的過程,
將主要資料庫的DDL和DML操作通過二進位日誌傳到從伺服器上,
然後在從伺服器上對這些日誌重新執行,從而使得主從伺服器的資料保持同步。
在mysql中,複製操作是非同步進行的,slaves伺服器不需要持續的保持串連接受master伺服器的資料。
mysql支援一台主伺服器同時向多台從伺服器進行複製操作,從伺服器同時可以作為其他從伺服器的主伺服器。
如果mysql主伺服器的訪問量比較大,可以通過複製資料,然後在從伺服器上進行查詢操作,從而降低主伺服器訪問壓力,
同時從伺服器作為主伺服器的備份,可以避免主伺服器因為故障資料丟失的問題。
複製操作大致可以分為3個步驟:
1、主伺服器將資料的改變記錄到二進位日誌(binary log)中;
2、從伺服器將主伺服器的binary log複製到它的中繼日誌(relay log)中;
3、從伺服器重做中繼日誌的事件,將資料的改變與主伺服器保持同步。
看起來原理還是很簡單的。
更詳細的過程如下:
首先,主伺服器會記錄二進位日誌,每個事務更新資料完成之前,主伺服器將這些操作的資訊記錄在二進位日誌裡面(為什麼是二進位的,不是文字文件),
在事件寫入二進位日誌完成後,主伺服器通知儲存引擎提交事務。
slave上的I/O進程連上master,並發出日誌請求,master收到來自slave的I/O進程的請求後,
通過負責複製的I/O進程根據請求資訊讀取制定日誌指定位置之後的日誌資訊,
返回給slave的I/O進程。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊已經到master端的bin-log檔案的名稱以及bin-log的位置。
slave的I/O進程接受到資訊後,將接受到的日誌內容一次添加到slave端的relay-log檔案的最末端,
並將讀取到的master端的bin-log檔案名稱和位置記錄到master-info檔案中(這個master-info檔案是在master上還是在slave上呢?)
slave的sql‘進程檢測到relay-log中新增加的內容之後,馬上解析relay-log的內容成為在master端真實執行時候的那些可執行內容,並在自身執行。
mysql複製環境,90%以上都是一個master帶一個或者多個slave的架構模式,如果master和slave的壓力不是太大的話,
非同步複製的延時一般很少,尤其是slave端的複製方式改成兩個進程(I/O和sql?)處理之後,更是減少了slave端的延時。
對資料即時性要求不高的應用,只要通過廉價的電腦伺服器來擴充slave的數量,將讀壓力分散到多台slave上,
即可解決資料端的讀壓力瓶頸。
mysql主從複製(一)