Mysql

安全地提升主人到奴隸

  • September 4, 2017

以前我問過類似的問題MySql Switching Masters during Failover with log-slave-updates

假設這是我們目前的複制

在此處輸入圖像描述

另外,我的應用伺服器很少。每個應用伺服器都直接連接到Master 1以進行 INSERT 和 UPDATE 以及從站

$$ 1-3 $$為了選擇。 我的問題是,我究竟如何才能將大師 2提升為真正的唯一大師。重要提示Master 2和它下面的所有 slave 都是 mysql 5.5 而Master 1是 mysql 5.2

當我在應用程序設置中將Master 1的 IP更改為Master 2的 IP 並進行部署時,有一段時間我在****Master 1Master 2上都有 UPDATE 和 INSERTS ,這導致 Master 2上出現“重複條目…” 。之後,我重建樹並在部署前幾秒鐘在Master 2上執行 STOP SLAVE。當然,我失去了一些數據,這些數據被插入到Master 1而沒有復製到Master 2

那麼,在不失去數據的情況下,正確的方法是什麼。

另外,我仍然不明白在 STOP SLAVE 之後要在Master 2上執行什麼以重置“從屬設置”,看起來我真的不需要這樣做,只需 STOP SLAVE 一切都應該工作,但是只是為了保持我想重置“從屬設置”的順序。

當您在應用程序中移動 IP 時,當時打開的任何數據庫連接都完全不知道移動。快速會在Master1netstat | grep -i mysql上揭示這一點。

您最好按如下方式對 IP 進行切換:

  • 在 Master1 上

    • FLUSH HOSTS;
    • service mysql stop
  • 在應用程序中更改 IP

  • 在所有 Web 伺服器上,service httpd restart

為了保護應用程序不必為了分配新 IP 而對其進行編輯,請嘗試改用 DB VIP。

例如:

  • Master1 是 10.1.2.30
  • Master2 是 10.1.2.40
  • 使用 10.1.2.70 作為 DBVIP

這是您可以設置的內容

  • 在 Master1 上,執行ip addr add 10.1.2.70/24 dev eth1
  • 10.1.2.70在您的應用中使用

然後,當需要切換時,請執行以下操作

  • 在 Master1 上

    • FLUSH HOSTS;
    • service mysql stop
    • ip addr del 10.1.2.70/24 dev eth1
  • 在 Master2 上

    • ip addr add 10.1.2.70/24 dev eth1
    • SHOW SLAVE STATUS\G並確保執行來自 Master1 的所有最終 SQL 語句
  • 在所有 Web 伺服器上,service httpd restart

這樣,切換不會涉及編輯應用程序的任何部分。請注意,我沒有提到在STOP SLAVE任何地方執行,因為一旦 mysql 在 Master1 上停止,這將允許任何最終 SQL 語句從 Master1 流向 Master2。

引用自:https://dba.stackexchange.com/questions/23626