Mysql主從複製作用和工作原理詳解

這篇文章主要介紹了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,增強了主從複製的實時性.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章