我有一个MySQL主/从配置
-------- --------
| master | -> | slave1 |
-------- --------
我想杀掉我现在的master,把slave1变成新的master,让另一个slave指向slave1
-------- ------------ --------
| master | | new master | -> | slave2 |
-------- ------------ --------
KILLED
在数据库不停机的情况下执行此操作的最佳方法是什么? 我正在使用 MariaDB 10.0.17
最佳答案
这相当容易,因为 MySQL 服务器可以同时是主服务器和从服务器。
我认为这个过程应该是这样的:
- 停止从 master 到 slave1 的复制。
- 将 slave1 设置为 master 并复制到 slave2。当 slave1 成为 master 时,这将确保事件如您所期望的那样被复制到 slave2。您还需要配置 slave1 以将当前主服务器的更新写入其二进制日志,否则初始复制将不会以菊花链方式进行。为此,您需要将
log_slave_updates
添加到您在 slave1 上的配置(参见 http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_log-slave-updates)。这一步很重要,否则 slave2 在转换期间不会从当前 master 复制数据。还没有真正开始复制。 - 转储 slave1 并导入到 slave2(或者您可以热复制并记下日志位置)。
- 使用您复制的日志位置开始从 slave1 到 slave2 的复制。
- 恢复从 master 到 slave1 的复制。如果您都正确地完成了这一切,slave2 现在应该从 master 获得链式复制。
- 将所有客户端指向 slave1(新 master)而不是 master。
- 确保 slave1 拥有来自 master 的所有更改,并停止它作为从属接收复制。
- 退休原主人。 slave1 现在是新主人。
所有客户端都应该有一个活跃的服务器来在流程的每个阶段进行读/写。无需停机。
希望这是有道理的。
关于mysql - 将 MySQL master 更改为 slave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29301026/