Replication 線程
Mysql 的Replication 是一個異步的復制過程,從一個Mysql instace(我們稱之為Master)復制到另一個Mysql instance(我們稱之Slave)。在Master 與Slave 之間的實現整個復制過程主要由三個線程來完成,其中兩個線程(Sql 線程和IO 線程)在Slave 端,另外一個線程(IO 線程)在Master 端。
要實現MySQL 的Replication ,首先必須打開Master 端的Binary Log(mysqlbin.xxxxxx)功能,否則無法實現。因為整個復制過程實際上就是Slave 從Master 端獲取該日志然後再在自己身上完全順序的執行日志中所記錄的各種操作
www.2cto.com
MySQL 復制的基本過程如下:
1. Slave 上面的IO 線程連接上Master,並請求從指定日志文件的指定位置(或者從最開始的日志)之後的日志內容;
2. Master 接收到來自Slave 的IO 線程的請求後,通過負責復制的IO 線程根據請求信息讀取指定日志指定位置之後的日志信息,返回給Slave 端的IO 線程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息在Master 端的Binary Log文件的名稱以及在Binary Log 中的位置;
3. Slave 的IO 線程接收到信息後,將接收到的日志內容依次寫入到Slave 端的Relay Log 文件(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master 端的binlog的文件名和位置記錄到master-info 文件中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log 的哪個位置開始往後的日志內容,請發給我”
4. Slave 的SQL 線程檢測到Relay Log 中新增加了內容後,會馬上解析該Log 文件中的內容成為在Master 端真實執行時候的那些可執行的Query 語句,並在自身執行這些Query。這樣,實際上就是在Master 端和Slave 端執行了同樣的Query,所以兩端的數據是完全一樣的。
復制實現級別
Row Level
Statement Level
1.常規復制架構(Master - Slaves)
www.2cto.com
2.Dual Master 復制架構(Master - Master)
可能有些讀者朋友會有一個擔心,這樣搭建復制環境之後,難道不會造成兩台MySQL 之間的循環復制麼?實際上MySQL 自己早就想到了這一點,所以在MySQL 的Binary Log 中記錄了當前MySQL 的server-id,而且這個參數也是我們搭建MySQL Replication 的時候必須明確指定,而且Master 和Slave 的server-id 參數值比需要不一致才能使MySQLReplication 搭建成功。一旦有了server-id 的值之後,MySQL 就很容易判斷某個變更是從哪一個MySQL Server 最初產生的,所以就很容易避免出現循環復制的情況。而且,如果我們不打開記錄Slave 的Binary Log 的選項(--log-slave-update)的時候,MySQL 根本就不會記錄復制過程中的變更到Binary Log 中,就更不用擔心可能會出現循環復制的情形了。
3.級聯復制架構(Master - Slaves - Slaves ...)
4.Dual Master 與級聯復制結合架構(Master - Master - Slaves)
MySQL Replication 環境的搭建實現比較簡單,總的來說其實就是四步,
第一步是做好Master 端的准備工作。
1.MySQL 記錄Binary Log 的選項打開;
2.GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.2';
第二步是取得Master 端數據的“快照”備份。
測試dump example 數據庫下的group_message 表:
mysqldump --master-data -usky -p example group_message > group_message.sql
www.2cto.com
第三步則是在Slave 端恢復Master 的備份“快照”。
第四步就是在Slave 端設置Master 相關配置,然後啟動復制
CHANGE MASTER TO 命令總共需要設置5 項內容,分別為:
MASTER_HOST:Master 的主機名(或者IP 地址);
MASTER_USER:Slave 連接Master 的用戶名,實際上就是之前所創建的repl 用戶;
MASTER_PASSWORD:Slave 連接Master 的用戶的密碼;
MASTER_LOG_FILE:開始復制的日志文件名稱;
MASTER_LOG_POS:開始復制的日志文件的位置,也就是在之前介紹備份集過程中一致提到的Log Position。
作者 bengda