2017-05-14 71 views
5

我是mysql新手。MySQL故障轉移:如何選擇奴隸作爲新的主人?

說到故障切換時,應該將哪個從站升級爲新的主站?

例如,A是主,B和C是從站,和A確實異步複製到B和C.

在的某個時間點,B從A比C,A崩潰接收更多的數據。

如果我們將C升爲新主人,並將B的主人改爲C,那麼B會發生什麼?它截斷其數據以匹配C?

顯然,B是最好的新主人選,但我的問題是,如何確定這個事實?

+0

http://stackoverflow.com/questions/14116488/master-slave-configuration歸因於 –

+0

問題......這是一個小問題,因爲在理解答案之前你需要理解這個問題:你在複製基於二進制日誌座標或全局事務標識符(GTID)? –

+0

@ Michael-sqlbot你能解釋一下嗎? – kingluo

回答

1

MySQL documentation有兩種建立主從架構的方法。使用日誌文件複製事務的傳統方式和使用GTID(全局事務標識符)的新版本(5.6+)。

如果您選擇使用GTID進行故障轉移處理,您將使用mysqlfailover實用程序。該工具能夠掌握的失敗在由數據庫管理員定義的三種方式之一:

  • 自動(默認值):搜索是在首選奴隸的列表中進行成爲高手,如果沒有可用的另一個從選擇。被選中的奴隸首先成爲所有其他奴隸的奴隸,並將其他奴隸的所有變化複製到奴隸,這樣新的主人將成爲最新版本的可能。
  • 選:與以上相同,不同之處在於,如果沒有從列表中的奴隸都可以返回一個錯誤,並且完成(無故障轉移)
  • 失敗:沒有故障發生mysqlfailover只會監控數據庫,並返回,如果一個錯誤失敗發生。

傳統的方式要求您實施自己的腳本來進行數據庫管理,更好地解釋here

+0

我知道有些工具(官方或非官方)可以進行自動故障切換,但我需要現場背後的理論。也就是說,我需要「爲什麼」而不是「如何」。 – kingluo

+0

你給出的官方參考文件沒有解釋確定最新奴隸的方法。 – kingluo

0

Relay_Master_Log_FileExec_Master_Log_Pos in SHOW SLAVE STATUS用於確定最佳奴隸作爲新的主人:更大的勝利。

沒有GTID,我認爲我們必須首先將其他奴隸與我們選擇的最好的奴隸同步。明顯的同步源是中繼日誌。在每個從站上,確定最佳從站的中繼日誌的差異,下載這些文件並重播SQL語句。一旦所有的奴隸趕上來,奴隸們就可以成爲最好的奴隸。 MASTER_LOG_FILEMASTER_LOG_POS將是最佳從站上最後一個binlog的尾部。

隨着GTID,它非常簡單:只需CHANGE MASTER TOMASTER_AUTO_POSITION=1