2013-01-02 58 views
-1

我需要爲mysql設置一個主從設備。主從設備配置

1個主設備和1個從設備(複製)。

現在主要問題是:當主控制器出現故障時,是否有可能將一個從控制器升級爲主控制器。 然後,當老主人起牀時,它現在將成爲奴隸。

+1

或者等待@ hd1回答他的白癡,並進一步阻止你做自己的研究。 – hd1

+0

非常感謝@ hd1 :) –

回答

1

您的問題的答案是「是」,這裏有instructions that must be followed。基本上,假設Andrew是當前的奴隸,Abe是當前的主人。交換兩者:

檢查Andrew以確保sql-thread已儘可能完成處理。在mysql提示符下,運行SHOW PROCESSLIST。 (你也可以使用MySQL Administrator來查看當前連接。)IO線程和sql線程都應該以system_users的形式列出。 IO線程應該具有「讀取失敗的主事件後重新連接」狀態。如果sql線程完全趕上,它的狀態應該是「已經讀取了所有的中繼日誌;等待從屬I/O線程更新它「。如果這說的是別的東西(比如處理中繼日誌),那麼奴隸仍然在追趕,你需要讓它繼續運行直到它被追上。

執行此檢查的另一種方法是運行命令SHOW SLAVE STATUS \G,並查看中繼日誌和位置。然後,您可以驗證這確實是最新的中繼日誌,並使用mysqlbinlog實用程序來驗證該位置是否是最新的。請注意,您不能在從站狀態輸出中使用SECONDS_BEHIND_MASTER變量 - 如果從站無法連接到主站,它將爲空。

一旦安德魯趕上,重置它。在MySQL提示符下,運行RESET SLAVE ;.這將刪除master.info文件,並從束縛鏈中釋放安德魯。

接下來,將所有二進制日誌移動到一個臨時目錄。二進制日誌看起來像andrew-bin.000001,其中andrew是主機名。這一步並不是絕對必要的,但我厭惡刪除日誌文件。

現在重置安德魯的二進制日誌。這將刪除所有二進制日誌,這就是爲什麼我們在上一步中備份它們的原因。當我們把安倍帶回來的時候,這也將使安倍成爲安德魯的奴隸很容易。爲此,請運行RESET MASTER;在安德魯。

在Andrew上編輯my.cnf,將read_only系統變量(如果已設置)註釋掉。安德魯

重啓MySQL:/etc/init.d/mysql restart

更改masterdb.janitors.com CNAME指向安德魯,而不是安倍晉三。這一步需要您的應用程序指向先前的setupmasterdb.janitors.com,而不是像andrew.janitors.com。

Web應用程序現在應該成功連接到Andrew作爲主數據庫。

一旦安倍恢復過來,我們可以把他作爲安德魯的奴隸。第一步是編輯Abe上的my.cnf,並取消註釋read_only系統變量。

在Abe上啓動mysql(與上面相同的命令)。請注意,這意味着不應將mysql設置爲在機器啓動時自動啓動。這是一項額外的安全措施。我不知道mysql是否會嘗試任何類型的錯誤恢復,比如完成由於崩潰而無法完成的事務 - 但是我們不希望它做任何事情,這會使它與Andrew不同(它可能已經略有不同,但我們無能爲力)。因此,通過在啓動之前將其設置爲只讀,我們確保db的唯一更新是來自新主節點的更新。

讓安倍成爲安德魯的奴隸。在安倍晉三,運行

CHANGE MASTER TO MASTER_USER='replicator', MASTER_PASSWORD='password', MASTER_HOST='andrew.janitors.com', MASTER_LOG_FILE='andrew-bin.0000001', MASTER_LOG_POS=4;

我們知道在日誌文件中的確切位置,因爲我們在第4步同時重置回來,我們設置了MASTER_HOST到andrew.janitors.com代替ofmasterdb.janitors.com因爲我們不一定需要將任何故障轉移到單獨的主服務器(因爲不同的主服務器會有不同的二進制日誌)。