mysql 主從複製原理

2022-09-16 01:24:17 字數 3448 閱讀 3636

主從複製,是用來建立乙個和主資料庫完全一樣的資料庫環境,稱為從資料庫;主資料庫一般是準實時的業務資料庫。

1、做資料的熱備,作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作,避免資料丟失。

2、架構的擴充套件。業務量越來越大,i/o訪問頻率過高,單機無法滿足,此時做多庫的儲存,降低磁碟i/o訪問的頻率,提高單個機器的i/o效能。

3、讀寫分離,使資料庫能支撐更大的併發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前台服務。如果前台使用master,報表使用sl**e,那麼報表sql將不會造成前台鎖,保證了前台速度。

1.資料庫有個bin-log二進位制檔案,記錄了所有sql語句。

2.我們的目標就是把主資料庫的bin-log檔案的sql語句複製過來。

3.讓其在從資料的relay-log重做日誌檔案中再執行一次這些sql語句即可。

4.下面的主從配置就是圍繞這個原理配置

5.具體需要三個執行緒來操作:

1.binlog輸出執行緒:每當有從庫連線到主庫的時候,主庫都會建立乙個執行緒然後傳送binlog內容到從庫。在從庫里,當複製開始的時候,從庫就會建立兩個執行緒進行處理:

2.從庫i/o執行緒:當start sl**e語句在從庫開始執行之後,從庫建立乙個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位置開始執行讀取到的更新事件,將更新內容寫入到sl**e的db.

---------------------

見文章上文

見文章上文

主從形式

mysql主從複製 靈活

用途及條件

mysql主從複製用途

主從部署必要條件:

主從原理

mysql主從複製原理

從庫生成兩個執行緒,乙個i/o執行緒,乙個sql執行緒;

i/o執行緒去請求主庫 的binlog,並將得到的binlog日誌寫到relay log(中繼日誌) 檔案中;

主庫會生成乙個 log dump 執行緒,用來給從庫 i/o執行緒傳binlog;

sql 執行緒,會讀取relay log檔案中的日誌,並解析成具體操作,來實現主從的操作一致,而最終資料一致;

問題及解決方法

mysql主從複製存在的問題:

解決方法:

半同步複製

mysql semi-sync(半同步複製)

半同步複製:

主從複製--非同步複製原理

半同步複製原理:

並行複製

mysql並行複製

設定

set global sl**e_parallel_workers=10;
設定sql執行緒數為10

其他

部分資料複製

主庫新增引數:

binlog_do_db=db1

binlog_ignore_db=db1

binlog_ignore_db=db2

或從庫新增引數

replicate_do_db=db1

replicate_ignore_db=db1

replicate_do_table=db1.t1

replicate_wild_do_table=db%.%replicate_wild_ignore_table=db1.%

聯級複製(常用)

a->b->c

b中新增引數:

log_sl**e_updates

b將把a的binlog記錄到自己的binlog日誌中

複製的監控:

show  sl**e status \g
複製出錯處理

常見:1062(主鍵衝突),1032(記錄不存在)

解決:總結

用途:實時災備的故障切換,讀寫分離,備份

原理問題及解決

主庫寫壓力大,因從庫只有乙個sql 執行緒來持久化,複製可能延遲

半同步複製:

5.5整合到mysql,以外掛程式的形式存在,需要單獨安裝

確保事務提交後binlog至少傳輸到乙個從庫

不保證從庫應用完成這個事務的binlog

效能有一定的降低

網路異常或從庫宕機,卡主庫,直到超時或從庫恢復

並行複製

在社群5.6中新增

庫級別並行應用binlog,同乙個庫資料更改還是序列的

5.7版本並行複製基於事務組

部分資料複製

聯級複製(常用)

複製的監控

複製出錯處理

mysql主從複製是mysql高可用性,高效能(負載均衡)的基礎

簡單,靈活,部署方式多樣,可以根據不同業務場景部署不同複製結構

複製過程中應該時刻監控複製狀態,複製出錯或延時可能給系統造成影響

mysql主從複製目前也存在一些問題,可以根據需要部署複製增強功能

mysql主從複製原理

mysql主從複製 靈活 用途及條件 mysql主從複製用途 主從部署必要條件 主從原理 mysql主從複製原理 從庫生成兩個執行緒,乙個i o執行緒,乙個sql執行緒 1 當主伺服器發生改變時,會將此改變以二進位制日誌的形式傳送到binlog中 2 而副伺服器會有乙個中繼日誌,實時監控主伺服器的b...

mysql主從複製原理

什麼是分庫分表 分表是啥意思?就是把乙個表的資料放到多個表中,然後查詢的時候你就查乙個表。比如按照使用者id來分表,將乙個使用者的資料就放在乙個表中 分庫是啥意思?就是你乙個庫一般我們經驗而言,最多支撐到併發2000,一定要擴容了,而且乙個健康的單庫併發值你最好保持在每秒1000左右,不要太大。那麼...

mysql主從複製原理

1 主伺服器上發起乙個mysql事務 2 主伺服器上使用一條或者多條sql語句。物理結構的真正實現依賴於儲存引擎,一邊會先記錄到記憶體快取中 innodb的語句被記錄到innodb事務日誌中,myisam 直接寫到表的資料檔案中 3 事務結束,主伺服器的二進位制日誌檔案記錄所使用的dml語句的結果 ...