如何在 MySQL 上切换主从,反之亦然?

MB.*_*MB. 3 mysql replication failover

我有两个 MySQL 实例,一个 master 和一个 slave。

如何在避免停机的同时切换它们以使从站成为主站,反之亦然?

Rol*_*DBA 5

如果您使用 DBVIP,您可以从 Master 中删除 DBVIP,然后将其放到 Slave 上。

例子

让我们组成一个 DBVIP,比如10.1.2.30.

把它放在 OS 中的 Master 上

ip addr addr 10.1.2.30/24 dev eth1
Run Code Online (Sandbox Code Playgroud)

将应用程序中的 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,你必须做更多的工作

STEP 01) 在从站上激活二进制日志

将此添加到 Slave 上的 /etc/my.cnf

[mysqld]
log-bin=mysql-bin
Run Code Online (Sandbox Code Playgroud)

STEP02)service mysql restart在从站上

应在 Slave 中启用二进制日志记录

STEP03)CHANGE MASTER TO使用 Slave 作为 Master 在 Master 上运行命令

  • 使用 mysql-bin.000001 作为 Master_Log_File
  • 使用以下数字作为 Master_Log_Pos
    • 107 为 MySQL 5.5
    • 106 为 MySQL 5.1
    • 98 为 MySQL 5.0

STEP04)START SLAVE;在 Master 上运行

这一点

  • 主人是奴隶的奴隶
  • 奴隶是主奴隶

这种配置更好地称为

  • 硕士/硕士
  • 循环复制

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

STEP06) 在 App 中更改 IP 地址以连接到 Slave

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

STEP08)SHOW PROCESSLIST;在 Slave 上确保有传入的 DB Connections

如果您看到来自 Apache 服务器的数据库连接,恭喜您在没有 MySQL 停机的情况下手动执行了故障转移。唯一的停机时间来自时间窗口 STEP05 - STEP07。