mysql replication原理介紹
本文為轉(zhuǎn)載文章,如果您在操作的時候遇到問題,可以給我發(fā)郵件討論
要想用好一個系統(tǒng),理解其實現(xiàn)原理是非常重要的事情,只有理解了其實現(xiàn)原理,我們才能夠揚(yáng)長避短,合理的利用,才能夠搭建出最適合我們自己應(yīng)用環(huán)境的系統(tǒng),才能夠在系統(tǒng)實施之后更好的維護(hù)他。MySQL Replication 可以說是在目前 MySQL 數(shù)據(jù)庫的實際應(yīng)用場景中最為常見的Scale Out 手段了,這里就針對其實現(xiàn)原理做一個簡單的分析。 一、 Replication 線程 Mysql的 Replication 是一個異步的復(fù)制過程,從一個 Mysql instace(我們稱之為 Master)復(fù)制到另一個 Mysql instance(我們稱之 Slave)。在 Master 與 Slave 之間的實現(xiàn)整個復(fù)制過程主要由三個線程來完成,其中兩個線程(Sql線程和IO線程)在 Slave 端,另外一個線程(IO線程)在 Master 端。 要實現(xiàn) MySQL 的 Replication ,首先必須打開 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否則無法實現(xiàn)。因為整個復(fù)制過程實際上就是Slave從Master端獲取該日志然后再在自己身上完全順序的執(zhí)行日志中所記錄的各種操作。打開 MySQL 的 Binary Log 可以通過在啟動 MySQL Server 的過程中使用 “—log-bin” 參數(shù)選項,或者在 my.cnf 配置文件中的 mysqld 參數(shù)組([mysqld]標(biāo)識后的參數(shù)部分)增加 “l(fā)og-bin” 參數(shù)項。 MySQL 復(fù)制的基本過程如下: 1. Slave 上面的IO線程連接上 Master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容; 2. Master 接收到來自 Slave 的 IO 線程的請求后,通過負(fù)責(zé)復(fù)制的 IO 線程根據(jù)請求信息讀取指定日志指定位置之后的日志信息,返回給 Slave 端的 IO 線程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 Binary Log 中的位置; 3. Slave 的 IO 線程接收到信息后,將接收到的日志內(nèi)容依次寫入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并將讀取到的Master端的bin-log的文件名和位置記錄到master- info文件中,以便在下一次讀取的時候能夠清楚的高速M(fèi)aster“我需要從某個bin-log的哪個位置開始往后的日志內(nèi)容,請發(fā)給我” 4. Slave 的 SQL 線程檢測到 Relay Log 中新增加了內(nèi)容后,會馬上解析該 Log 文件中的內(nèi)容成為在 Master 端真實執(zhí)行時候的那些可執(zhí)行 |