有些同學連集群和主從都分不清楚的,這里我說一下他們最本質的區別,其實也就是data-sharing和nothing-sharing的區別。集群是共享存儲的。主從復制中沒有任何共享。每台機器都是獨立且完整的系統。
目錄:
一、什么是主從復制
二、主從復制的作用(重點)
三、主從復制的原理(重中之重)
四、必問面試題干貨分析(最最重要的點)
一、什么是主從復制?
主從復制,是用來建立一個和主數據庫完全一樣的數據庫環境,稱為從數據庫;主數據庫一般是准實時的業務數據庫。
二、主從復制的作用(好處,或者說為什么要做主從)重點!
1、做數據的熱備,作為后備數據庫,主數據庫服務器故障后,可切換到從數據庫繼續工作,避免數據丟失。
2、架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的頻率,提高單個機器的I/O性能。
3、讀寫分離,使數據庫能支撐更大的並發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前台服務。如果前台使用master,報表使用slave,那么報表sql將不會造成前台鎖,保證了前台速度。
三、主從復制的原理(重中之重,面試必問):
1.數據庫有個bin-log二進制文件,記錄了所有sql語句。
2.我們的目標就是把主數據庫的bin-log文件的sql語句復制過來。
3.讓其在從數據的relay-log重做日志文件中再執行一次這些sql語句即可。
4.下面的主從配置就是圍繞這個原理配置
5.具體需要三個線程來操作:
1.binlog輸出線程:每當有從庫連接到主庫的時候,主庫都會創建一個線程然后發送binlog內容到從庫。
在從庫里,當復制開始的時候,從庫就會創建兩個線程進行處理:
2.從庫I/O線程:當START SLAVE語句在從庫開始執行之后,從庫創建一個I/O線程,該線程連接到主庫並請求主庫發送binlog里面的更新記錄到從庫上。從庫I/O線程讀取主庫的binlog輸出線程發送的更新並拷貝這些更新到本地文件,其中包括relay log文件。
3.從庫的SQL線程:從庫創建一個SQL線程,這個線程讀取從庫I/O線程寫到relay log的更新事件並執行。
可以知道,對於每一個主從復制的連接,都有三個線程。擁有多個從庫的主庫為每一個連接到主庫的從庫創建一個binlog輸出線程,每一個從庫都有它自己的I/O線程和SQL線程。
主從復制如圖:
原理圖2,幫助理解!
步驟一:主庫db的更新事件(update、insert、delete)被寫到binlog
步驟二:從庫發起連接,連接到主庫
步驟三:此時主庫創建一個binlog dump thread線程,把binlog的內容發送到從庫
步驟四:從庫啟動之后,創建一個I/O線程,讀取主庫傳過來的binlog內容並寫入到relay log.
步驟五:還會創建一個SQL線程,從relay log里面讀取內容,從Exec_Master_Log_Pos位置開始執行讀取到的更新事件,將更新內容寫入到slave的db.
四、面試題干貨分析(如果問到數據庫主從問題,必問以下問題):
1、主從的好處是?
2、主從的原理是?
3、從數據庫的讀的延遲問題了解嗎?如何解決?
4、做主從后主服務器掛了怎么辦?


