Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MySQL主服务器更改为从服务器_Mysql_Database_Mariadb_Master Slave_Slave - Fatal编程技术网

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

将MySQL主服务器更改为从服务器,mysql,database,mariadb,master-slave,slave,Mysql,Database,Mariadb,Master Slave,Slave,我有一个MySQL主/从配置 -------- -------- | master | -> | slave1 | -------- -------- 我想杀死我当前的主人,将slave1转换为新主人,并让另一个奴隶指向slave1 -------- ------------ -------- | master | | new master | -> | slave2 | ------

我有一个MySQL主/从配置

 --------        --------  
| master |  ->  | slave1 |
 --------        --------  
我想杀死我当前的主人,将slave1转换为新主人,并让另一个奴隶指向slave1

 --------          ------------        --------
| master |        | new master |  ->  | slave2 |
 --------          ------------        --------
  KILLED
在没有数据库停机的情况下,最好的方法是什么?
我使用的是MariaDB 10.0.17,这相当简单,因为MySQL服务器可以同时作为主服务器和从服务器

我认为这一过程会有如下结果:

  • 停止从主服务器到从属服务器的复制1
  • 将slave1设置为主服务器并复制到slave2。当slave1成为主服务器时,这将确保事件按预期复制到slave2。您还需要将slave1配置为将更新从当前主服务器写入其二进制日志,否则初始复制将不会被菊花链连接。为此,您需要在slave1上的配置中添加
    log\u slave\u updates
    (请参阅)。此步骤很重要,否则slave2在转换期间将不会从当前主机复制数据。还没有真正开始复制
  • 转储slave1并导入slave2(或者,您可以热拷贝并记录日志位置)
  • 使用复制的日志位置开始从slave1到slave2的复制
  • 恢复从主服务器到从属服务器的复制1。如果您已经正确地完成了这一切,那么slave2现在应该可以从主服务器获得链接复制
  • 将所有客户端指向slave1(新主服务器)而不是主服务器
  • 确保slave1拥有来自主服务器的所有更改,并停止它作为从服务器接收复制
  • 退休原主人。奴隶1现在是新主人
  • 在流程的每个阶段,所有客户端都应该有一个活动服务器进行读/写操作。不需要停机


    希望这是有道理的

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


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

    在从服务器上运行下面的命令

  • 停止从IO_线程并等待“停止从IO_线程”显示所有读取的二进制文件

  • 停止奴隶

  • 重置主控


  • 只要Slave1不用于读取或任何其他进程,我看不出第1点有任何问题。好吧,如果在此期间主服务器崩溃,您会非常紧张。@fancyPants您需要为slave2获取一致的数据快照。一个简单的方法是如上所述。但是,如果OP有更严格的要求,那么他可以改为进行热拷贝(如第3点所述)。OPs的要求是“无停机时间”,而不是“完全冗余”。我所做的是按照上的说明(以slave1为主)并启用
    log\u slave\u updates=on
    。是的,您必须打开它。