pt-table-sync无法修改binlog_format

时间:2014-11-21 12:57:12

标签: percona multi-master-replication

我有一个生产percona主 - 主群集。辅助主机有一个复制错误并使用pt-table-sync,我正在尝试同步主机。看起来像任何同步操作都需要binlog_format =“STATEMENT”。以下是pt-table-sync错误

pt-table-sync --verbose --dry-run --sync-to-master h =,u = root,p =,D =,t =

无法/ !50108 SET @@ binlog_format:='STATEMENT' /:DBD :: mysql :: db do failed:拒绝访问;你需要(至少有一个)SUPER特权来进行这项操作[for Statement“/ !50108 SET @@ binlog_format:='STATEMENT' /”] / usr / local / bin / pt-table-sync line 10827。

此工具需要binlog_format = STATEMENT,但当前的binlog_format设置为MIXED,并且在尝试更改它时发生错误。如果运行MySQL 5.1.29或更高版本,则设置binlog_format需要SUPER权限。在运行此工具之前,您需要手动将binlog_format设置为“STATEMENT”。 发出rollback()由于DESTROY没有显式disconnect()DBD :: mysql :: db句柄empowern_aws; host = ; mysql_read_default_group =客户端/ usr / local / bin / pt-table-sync line 10830。

由于这是生产集群,有没有办法让pt-table-scan完全没有制动复制?是否手动更新两个主服务器上的binlog_format会影响相应从服务器上的复制吗?

感谢帮助。

1 个答案:

答案 0 :(得分:2)

  

由于这是生产集群,有没有办法让pt-table-scan完全没有制动复制?

我认为你的意思是pt-table-sync,是的,你将能够使它工作(如果你还没有)。我不会使用root用户,我通常会创建一个临时用户来执行表同步操作:

GRANT ALL ON *.* TO 'tablesync'@'%' IDENTIFIED BY 'tablesync';

此用户应该出现在两个主服务器上,并允许pt-table-sync在继续之前设置binlog_format = STATEMENT(仅用于该会话,而不是全局)。

  

手动更新两个主服务器上的binlog_format会影响相应从服务器上的复制吗?

请参阅 - https://dev.mysql.com/doc/refman/5.1/en/binary-log-setting.html

  

每个MySQL服务器都可以设置自己的,只有自己的二进制日志格式(无论binlog_format是设置为全局还是会话范围)。这意味着更改复制主服务器上的日志记录格式不会导致从服务器更改其日志记录格式以匹配。 (使用STATEMENT模式时,不会复制binlog_format系统变量;使用MIXED或ROW日志记录模式时,它会被复制但被从服务器忽略。)在复制正在进行时更改主服务器上的二进制日志记录格式,或者不更改它在slave上会导致复制失败并出现错误,例如执行行事件错误:'无法执行语句:无法写入二进制日志,因为语句是行格式而BINLOG_FORMAT = STATEMENT。'

在您的情况下,如果从属/副本具有binlog_format = MIXED并且您已将主服务器更改为binlog_format = STATEMENT,则从属服务器/副本服务器应该能够处理任何基于STATEMENT的复制。

编辑:完成后别忘了删除临时用户!

DROP USER 'tablesync'@'%';
相关问题