程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql復制架構

Mysql復制架構

編輯:MySQL綜合教程

Mysql復制架構
 
這是mysql主從復制最基本的原理圖,左邊是主master,右邊是從slave,從圖中可以清晰看到mysql的復制進程,master產生二進制日志binlog,輸出到binlog文件,然後slave主機請求日志文件,master主機發送二進制到slave主機,二進制到slave後,寫入中繼日志,realylog,然後slave主機調用sql進程讀取中繼日志內容,寫入到數據庫,從而維持服務器的數據同步。
 
和上面不同的是,這個架構是一個三級架構,三台mysql服務器組成一個鏈式復制架構
,從左至右的master--slave--slave,前面兩個,即master--slave和第一個圖一樣,沒什麼可說的,唯一的小變化是中間的slave主機也開啟了二進制日志,他把從master上更新到的信息寫入自身的logbin中,這樣的目的可以從圖中看到,為後面的slave主機提供二進制日志,此時這台slave主機其實充當了master主機的作用。
 
這個圖中說明了mysql二進制日志的過濾,除非你想同步所有的數據庫(包括mysql數據庫,這會造成不必要的麻煩),二進制的日志過濾主要取決於master主機的設置binlog_do_db和binlog_ignore_db,他們決定了什麼數據會記錄到二進制日志中,並傳送到slave主機,而slave主機也可以通過配置一些選項決定怎麼利用這些數據,如replicate_do_db,replicate_do_table等
 
這個是一主多從的復制架構,實際應用也很多,可以用master來充當更新服務器,其他的幾台slave充當只讀服務器,在一定程度上分擔了數據庫流量,一定確保只在master上更新數據。

這個一個主主復制的架構,兩台master互為主從,更新和讀取操作可以同時在兩台上進行、

這是一個反例,這種復制是不被允許的,一台slave不可能同時接受兩台master的數據,不過我們可以考慮其他的辦法來實現,比如後面的blackhole數據存儲引擎就可以實現。

這個則是在主主復制架構上的一個擴展,每台master下面還有一層slave結構

這個其實也是主主復制結構的擴展(我的個人理解)只是master的結構組成了一個環狀結構

這個也就容易理解,在環狀結構的基礎上又延伸出slave層。

這個圖不太好理解,因為中間涉及到一個blackhole(黑洞)存儲引擎,blackhole其實就相當於 linux系統中的/dev/null 

主要意思就是一主N從的結構,這裡這個N可能會有很多,幾十台,百台,那這樣master主機就會為每台slave主機分配出一個binlog dump進程,這樣的話會嚴重影響master的性能,這樣可以考慮在主從之間添加一個分布式master,配置blackhole存儲引擎,他起到一個中繼的作用,他接收數據但丟其他而不是存儲,只是會把master的二進制日志供下層的slave來讀取。

這裡摘錄一段別人的解釋:
 
把blackhole引擎,用做slave,配置一些過濾規則,比如復制某些表、不復制某些表。然後也作為一個master,帶多個slave。這樣的好處是省了一定的網絡帶寬,如果沒有blackhole做中間環節,那麼就需要把第一個master的所有日志都傳遞到各個slave上去。經過 blackhole這一個slave兼master過濾後再傳遞給多個slave,減少了帶寬占用。而使用blackhole引擎的原因是它不占硬盤空間,作為一個中轉,只負責記日志、傳日志。
 
BLACKHOLE 存儲引擎就像 “ 黑洞 ” 一樣,它接收數據但丟棄它而不是存儲它。查詢總是返回空集。

mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;

Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');

Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test;

Empty set (0.00 sec)

雖然 BLACKHOLE 表不存儲任何數據,但是如果開啟二進制日志 ( Binary Log ),SQL 語句將被寫入日志,反之 SQL 語句會被過濾掉。

BLACKHOLE 表的其他用途:

 * 通過對比開啟和關閉二進制日志 ( Binary Log ) 時 BLACKHOLE 的性能,來計算二進制日志記錄的開銷。
 * BLACKHOLE 本質上是一個 “ no-op ” 存儲引擎,它可能被用來查找與存儲引擎自身不相關的性能瓶頸
下面這兩張圖也是跟blackhole存儲相關,等慢慢研究blackhole後再細細研究


最後這種情況大致的意思,有三台mysql server,1,2和3,3做為復制從服務器,想同時復制1上的DB1和2上的DB2,這樣可以在2上引進一個blackhole的DB1來解決問題.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved