有些同學連叢集和主從都分不清楚的,這裡我說一下他們最本質的區別,其實也就是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、做主從後主伺服器掛了怎麼辦?