如何完全禁用 MySQL 复制

76 mysql replication

我正在运行双主 MySQL 复制,现在想要移动到没有复制的单个数据库。如何完全禁用两个数据库上的复制?

小智 95

要使用 master-master 设置完全禁用复制,您应该在每个从站上执行以下操作:

  1. STOP SLAVE;
  2. RESET SLAVE;RESET SLAVE ALL;用于 MySQL 5.5.16 及更高版本)
  3. 编辑 my.cnf 并删除任何涉及“master-...”或“replicate-...”选项的信息(如果存在)。my.cnf 中可能没有任何内容,因为复制也可以动态设置。
  4. 重启mysqld。

  • 在 MySQL 重新启动之前,即使在给出“RESET SLAVE”命令之后,它也会报告有关“SLAVE STATUS”查询的旧复制信息。了解监控或远程配置管理工具很重要。在 CentOS 6.5 上使用 MySQL 5.5.38 确认行为。 (4认同)

小智 20

我知道这是一个老问题,但我发现我还必须重置从变量。如果您像建议的那样使用“blah”,服务器将尝试启动以查找服务器“blah”。

更改MASTERMASTER_HOST='',MASTER_USER='',MASTER_PASSWORD='';

可以验证机器不再是slave

SHOW SLAVE STATUS \G;
Run Code Online (Sandbox Code Playgroud)

  • 这不再有效。设置`CHANGE MASTER TO MASTER_HOST=''` 现在会抛出错误。 (7认同)

小智 13

在从服务器上:

  1. 运行“stop slave”来停止复制。
  2. 运行“reset slave”告诉从服务器忘记它在从主服务器检索到的二进制日志中的位置。
  3. 将“skip-slave-start”添加到 my.cnf 以防止在重新启动 MySQL 时启动复制。

无需在 master 或 slave 上重新启动 MySQL。完整的文档可以在MySQL 参考手册的第 19 节中找到。

我建议保留其余的复制设置,以防您决定恢复到以前的配置。这样你只需要推送数据并重置从站位置(不要忘记删除跳过从站开始),而不是重新创建整个布的设置。


Rol*_*DBA 9

无论MySQL版本如何,最完整的方法如下

cd /var/lib/mysql
service mysql stop
rm -f master.info relay-*`
service mysql start
Run Code Online (Sandbox Code Playgroud)

这必须适用于最新版本,因为复制设置仍然存在于 MySQL 5.5 的 RAM 中。

我刚刚回答了一个关于这个主题的类似问题:如何将 MySQL 以前的从站更改为主站并删除从站状态信息?


小智 6

仅编辑 my.cnf 文件不足以禁用复制。事实上,它不再是推荐的启用方式。将条目放入 my.cnf 文件仅对下次启动有效,其行为就像您已将命令输入到 mysql 客户端一样:

mysql> 将 master 更改为 master_host='blah', master_user='blah', master_password='blah'...;

这两种方法都会在数据目录中创建一个名为master.info的文件。只要此文件存在,服务器就会尝试使用那里的详细信息进行复制。“重置从机”;第一个答案中列出的命令将删除master.info文件(以及relay-log.info文件)。正如第一个答案中提到的,您还需要确保 my.cnf 文件中没有该配置信息,否则在下次重新启动服务器时,将重新启用日志记录。


小智 6

我将此添加到 Harrison Fisk 的回答中:

如果您使用过,RESET SLAVE ALL;则无需重新启动。

此外,您可能希望启用已在从站上禁用的事件:

select * from information_schema.events where status = 'SLAVESIDE_DISABLED';
Run Code Online (Sandbox Code Playgroud)

对于他们每个人:

alter event <event_name> enable;
Run Code Online (Sandbox Code Playgroud)


小智 5

一个答案在这里:

http://www.oops.net.br/~bac/bam/canopy_repl_setup.htm

*编辑 MySQL 配置文件:/etc/my.cnf 并删除标题为 [mysqld] 部分的以下 7 行:

port=3306
log-bin
server-id=1
master-host=10.0.0.2
master-user=server_1_repl
master-password=server_1_passwd
master-port=3306*
Run Code Online (Sandbox Code Playgroud)

重启 MySQL。