mysql - 将 MySQL master 更改为 slave

标签 mysql database mariadb master-slave slave

我有一个MySQL主/从配置

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

我想杀掉我现在的master,把slave1变成新的master,让另一个slave指向slave1

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

在数据库不停机的情况下执行此操作的最佳方法是什么? 我正在使用 MariaDB 10.0.17

最佳答案

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

我认为这个过程应该是这样的:

  1. 停止从 master 到 slave1 的复制。
  2. 将 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 复制数据。还没有真正开始复制。
  3. 转储 slave1 并导入到 slave2(或者您可以热复制并记下日志位置)。
  4. 使用您复制的日志位置开始从 slave1 到 slave2 的复制。
  5. 恢复从 master 到 slave1 的复制。如果您都正确地完成了这一切,slave2 现在应该从 master 获得链式复制。
  6. 将所有客户端指向 slave1(新 master)而不是 master。
  7. 确保 slave1 拥有来自 master 的所有更改,并停止它作为从属接收复制。
  8. 退休原主人。 slave1 现在是新主人。

所有客户端都应该有一个活跃的服务器来在流程的每个阶段进行读/写。无需停机。

希望这是有道理的。

关于mysql - 将 MySQL master 更改为 slave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29301026/

相关文章:

javascript - 用ajax将记录添加到mysql数据库后重新加载查询,无需重新加载页面

sql - 提高PostgreSQL集差效率

mysql - 添加一列需要另一列的默认值?

ruby-on-rails - Rails 正在寻找/config/config/database.yml

mysql - Adminer 和 phpmyadmin 的 UTF-8 输入问题

mysql - 如何使用 SQL 来匹配这个?

mysql - 如何使用 Codeigniter 将两个不同的查询合并为一个查询

php - 数据不会从 HTML 表单传递到数据库

centos - 如何更改 MariaDB 的数据目录?

sql - 在 MySql 数据库中的两个日期之间搜索