Mysql主從複製作用和工作原理詳解
一、什麼是主從複製
主從複製,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫,主資料庫一般是準實時的業務資料庫。在最常用的mysql資料庫中,支援單項、非同步賦值。在賦值過程中,一個伺服器充當主伺服器,而另外一臺伺服器充當從伺服器;此時主伺服器會將更新資訊寫入到一個特定的二進位制檔案中。
並會維護檔案的一個索引用來跟蹤日誌迴圈。這個日誌可以記錄併發送到從伺服器的更新中去。當一臺從伺服器連線到主伺服器時,從伺服器會通知主伺服器從伺服器的日誌檔案中讀取最後一次成功更新的位置。然後從伺服器會接收從哪個時刻起發生的任何更新,然後鎖住並等到主伺服器通知新的更新。
二、主從複製的作用
一是確保資料安全;做資料的熱備,作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作,避免資料的丟失。
二是提升I/O效能;隨著日常生產中業務量越來越大,I/O訪問頻率越來越高,單機無法滿足,此時做多庫的儲存,有效降低磁碟I/O訪問的頻率,提高了單個裝置的I/O效能。
三是讀寫分離,使資料庫能支援更大的併發;在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那麼報表sql將不會造成前臺鎖,保證了前臺速度。
三、主從複製的原理
主從複製中涉及的檔案
主庫: binlog
從庫:
- relaylog 中繼日誌
- master.info 主庫資訊檔案
- relaylog.info relaylog應用的資訊
主從複製中涉及的三個執行緒
主庫:
Binlog_Dump Thread :
從庫:
SLAVE_IO_THREAD
SLAVE_SQL_THREAD
具體原理如圖所示:
1.從資料庫執行change master to 命令(主資料庫的連線資訊+複製的起點)
2.從資料庫會將以上資訊,記錄到master.info檔案
3.從資料庫執行 start slave 命令,立即開啟SLAVE_IO_THREAD 和SLAVE_SQL_THREAD這兩個執行緒
4.從資料庫 SLAVE_SQL_THREAD,讀取master.info檔案中的資訊獲取到IP,PORT,User,Pass,binlog的位置資訊
5.從資料庫SLAVE_IO_THREAD請求連線主資料庫,主資料庫專門提供一個SLAVE_IO_THREAD,負責和SLAVE_SQL_THREAD互動
6.SLAVE_IO_THREAD根據binlog的位置資訊,請求主資料庫新的binlog
7.主資料庫通過Binlog_DUMP_Thread將最新的binlog,通過網路TP給從資料庫的SALVE_IO_THREAD
8.SLAVE_IO_THREAD接收到新的binlog日誌,儲存到TCP/IP快取,立即返回ACK給主庫,並更新master.info
9.SLAVE_IO_THREAD將TCP/IP快取中資料,轉儲到磁碟relaylog中.
10.SLAVE_SQL_THREAD讀取relay.info中的資訊,獲取到上次已經應用過的relaylog的位置資訊
11.SLAVE_SQL_THREAD會按照上次的位置點回放最新的relaylog,再次更新relay.info資訊
12.從資料庫會自動purge應用過relay進行定期清理
一旦主從複製構建成功,主資料庫當中發生了新的變化,都會通過 slave_dump_THREAD傳送訊號給SLAVE_IO_THREAD,增強了主從複製的實時性.
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。