将MySQL主服务器更改为从服务器

时间:2015-03-27 12:45:19

标签: mysql database mariadb master-slave slave

我有一个MySQL主/从配置

 --------        --------  
| master |  ->  | slave1 |
 --------        --------  

我想要杀死当前的主设备,将slave1转换为新主设备并让另一个设备指向slave1

 --------          ------------        --------
| master |        | new master |  ->  | slave2 |
 --------          ------------        --------
  KILLED

没有数据库停机时间,最好的方法是什么? 我正在使用MariaDB 10.0.17

3 个答案:

答案 0 :(得分:0)

这很容易,因为MySQL服务器可以同时是主服务器和从服务器。

我认为这个过程会像:

  1. 停止从master到slave1的复制。
  2. 将slave1设置为master并复制到slave2。当slave1成为主服务器时,这将确保事件按照您的预期复制到slave2。您还需要将slave1配置为将更新从当前主服务器写入其二进制日志,否则初始复制将不会以菊花链形式连接。为此,您需要在slave1上的配置中添加log_slave_updates(请参阅http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_log-slave-updates)。此步骤很重要,否则slave2将不会在转换期间从当前主服务器复制数据。实际上还没有开始复制。
  3. 转储slave1并导入slave2(或者你可以热拷贝并记录日志位置)。
  4. 使用复制的日志位置从slave1开始复制到slave2。
  5. 恢复从master到slave1的复制。如果您已正确完成此操作,则slave2现在应该从主服务器获得链式复制。
  6. 将所有客户端指向slave1(新主服务器)而不是主服务器。
  7. 确保slave1具有master的所有更改,并停止接收作为从属设备的复制。
  8. 退休原来的主人。 slave1现在是新的主人。
  9. 所有客户端都应该有一个活动服务器,以便在流程的每个阶段进行读/写。无需停机。

    希望这是有道理的。

答案 1 :(得分:0)

嗯,这比你想象的要容易。您可以构建完整的复制链。

只需设置从slave1到slave2的复制,杀死当前的主人,你就完成了。

答案 2 :(得分:0)

在SLAVE上运行以下命令

  1. STOP SLAVE IO_THREAD并等到“STOP SLAVE IO_THREAD”显示所有读取的二进制文件。

  2. STOP SLAVE

  3. RESET MASTER