Mysql
如何在 MySQL 上切換 master 和 slave,反之亦然?
我有兩個 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。這是一些激進的東西:
service httpd stop
在所有 Apache 伺服器上service mysql stop
在大師ip addr del 10.1.2.30/24 dev eth1
在大師ip addr add 10.1.2.30/24 dev eth1
在奴隸上service httpd start
在所有 Apache 伺服器上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。