MySQL 复制错误 '如果启用日志记录,则无法“ALTER”日志表' 的查询

22

这对我来说确实听起来像是这个 bug:MySQL bug #43579 - gertvdijk
2个回答

39

似乎我将回答自己的问题。在启用登录时尝试更改日志表会导致错误。我真的不明白主服务器如何执行该查询,因为它具有相同的登录方式,如果可以执行,则为什么从服务器不能执行相同操作?我很乐意阅读解释,但现在让我们专注于解决方案。

要查看破坏复制的错误,请执行

SHOW SLAVE STATUS\G 这样就会看到那条捣乱的查询

现在可以停止从服务器

STOP SLAVE;

禁用相关日志(不要复制+粘贴此内容,而是先检查自己的配置):

SET GLOBAL slow_query_log = 'OFF';

重新启动从服务器

START SLAVE;

查看是否没有错误显示

SHOW SLAVE STATUS\G

然后再次启用相关日志:

SET GLOBAL slow_query_log = 'ON';

请告诉我这是否有所帮助。


8
无需禁用sql_log_bin。 - kenn
2
禁用sql_log_bin是不必要的,而且比暂时禁用slow_query_log更危险。Daniel Caillibaud的答案更安全。 - richardkmiller
太好了!完美运行,并避免了重新创建从服务器的需要。 - quentinadam

23

我有一个主-主复制,因此我不能停止从服务器上的二进制日志,但是

STOP SLAVE;
SET GLOBAL slow_query_log = "OFF";
START SLAVE;
SET GLOBAL slow_query_log = "ON";

解决了我的问题


好奇,但如果已知它会导致问题,为什么要在从服务器上重新启用slow_query_log?当主服务器上已经启用时,在从服务器上启用它有什么价值呢? - jwg2s
@jwg2s 从属服务器通常会执行不同的只读查询(除非它纯粹用于备份),因此您需要知道其中是否有任何查询也很慢。 - Jan M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接