Mysql

如何在 MySQL 上切換 master 和 slave,反之亦然?

  • May 29, 2017

我有兩個 MySQL 實例,一個主實例,一個從屬實例。

如何切換它們以使從屬設備成為主設備,反之亦然,同時避免停機?

如果您使用 DBVIP,您可以從 Master 移除 DBVIP,然後將它帶到 Slave 上。

例子

讓我們組成一個 DBVIP,例如10.1.2.30.

把它放在 OS 中的 Master 上

ip addr addr 10.1.2.30/24 dev eth1

將應用程序中的 IP 替換為10.1.2.30,讓應用程序繼續執行一段時間,確保應用程序正在使用 DBVIP。

這是一些激進的東西:

  1. service httpd stop在所有 Apache 伺服器上
  2. service mysql stop在大師
  3. ip addr del 10.1.2.30/24 dev eth1在大師
  4. ip addr add 10.1.2.30/24 dev eth1在奴隸上
  5. service httpd start在所有 Apache 伺服器上
  6. SHOW PROCESSLIST;在從站上確保有傳入的數據庫連接

如果您看到來自 Apache 伺服器的數據庫連接,恭喜您手動執行了故障轉移。

更新 2012-09-19 14:28 EDT

如果您不能使用 DBVIP,則必須做更多工作

步驟 01) 在從站上啟動二進制日誌

將此添加到從站上的 /etc/my.cnf

[mysqld]
log-bin=mysql-bin

STEP02)service mysql restart在奴隸上

應在從站中啟用二進制日誌記錄

STEP03)CHANGE MASTER TO以 Slave 為 Master 在 Master 上執行命令

  • 使用 mysql-bin.000001 作為 Master_Log_File

  • 使用以下數字作為 Master_Log_Pos

    • MySQL 5.5 為 107
    • MySQL 5.1 為 106
    • MySQL 5.0 為 98

STEP04)START SLAVE;在 Master 上執行

在此刻

  • 主人是奴隸的奴隸
  • 奴隸是主奴隸

這種配置更廣為人知的是

  • 碩士/碩士
  • 循環複製

STEP05)service httpd stop在所有 Apache 伺服器上

STEP06) 在App中更改IP地址以連接從站

STEP07)service httpd start在所有 Apache 伺服器上

STEP08)SHOW PROCESSLIST;在從站上確保有傳入的 DB 連接

如果您看到來自 Apache 伺服器的數據庫連接,恭喜您手動執行了故障轉移,而沒有 MySQL 停機時間。唯一的停機時間來自時間視窗 STEP05 - STEP07。

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