1. 程式人生 > >MySQL主從復制原理深入解析與練習

MySQL主從復制原理深入解析與練習

數據庫 記錄 sql語句 change master

MySQL主從復制原理深入解析與練習


MySQL主從復制畫圖描述:


技術分享


MySQL主從復制原理上圖詳解:

① 用戶做crud操作,寫入數據庫,更新結果記錄到binlog中;

② 主從同步是主找從的,從庫IO發起請求,主庫的主進程看從庫的master change

中給的參數是否合法,如果合法主進程交給IO進程進行3操作,否則拒絕;

③ 主庫根據master的位置點,從這個位置點的binlog日誌一直到binlog最後,將其準備發送給從庫;

④ 將找到的binlog日誌發給從庫,並且還會發送新的日誌點;

⑤ 從庫收到binlog日誌,將其寫入relay-log(中繼日誌)中;

⑥ 從庫IO進程再向master info保存主庫傳過來的最後的binlog日誌的位置點;

⑦ 從庫IO是循環發起請求的,發了再要,不會顧及SQL讀取中繼的操作。

從庫IO根據新的日誌點,向主庫發起請求,主庫執行3操作再,再發送新的binlog給從庫,從庫再執行5操作;

⑧ 其實當第一次向

relay-log中放數據時,SQL進程就已經知道,SQL進程將relay-log中的sql語句轉換成數據,寫入從庫,從而實現同步;(relay-log和master info也不會交互)

⑨ SQL讀取中繼日誌,並不會一次性全部讀完,會把讀取到的日誌點存放到relay-log.info中。


主從同步實現之前應該具備的條件和做的準備:


① 從庫有IO和SQL兩個線程,主庫有IO一個線程

② 開啟主從同步之前,主從庫相對與一個日誌點之前的數據是一致的;

(即先要將主庫全備,並且記錄全備的binlog:show master status;然後將全備的內容放入從庫,即可完成)

③ 開啟主從同步之前,要在主庫建立從庫進行同步的賬號;

(3306mysql>grant replication slave on *.* to rep@192.168.168.101 identified by 123;

④ 主庫要打開binlog開關;

⑤ 從庫要與主庫進行主從同步,要做一下配置

3307mysql>CHANGE MASTER TO

MASTER_HOST=192.168.168.101

MASTER_PORT=3306

MASTER_USER=rep

MASTER_PASSWORD=123,

MASTER_LOG_FILE=mysql-bin.000002,

MASTER_LOG_POS=238;

註:master_host參數裏面最好不要是域名或者localhost,最好是IP;對於最後兩個參數,如果主庫做全備的時候加了參數--master-data=1,最後兩條就不用指定了,如果沒有,主庫做全備之前之後要mysql>show master status;查看日誌點,並保證之前之後一致

⑥ 在從庫mysql>start slave;開啟從庫的IOSQL進程,並且查看mysql>show slave status\G;查看(slave_IO_Running:yes slave_SQL_Rnning:yes scends_behind_master:0)如果這三個參數是這樣,基本上,主從復制配置完成。



本文出自 “qb的博客” 博客,謝絕轉載!

MySQL主從復制原理深入解析與練習