1

我有一个生产 percona master-master 集群。辅助主服务器有一个复制错误,并且使用 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: Access denied; 在 /usr/local/bin/pt-table-sync 行,您需要(至少一个)超级权限才能执行此操作 [for Statement "/ !50108 SET @@binlog_format := 'STATEMENT' /"] 10827。

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

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

感谢帮助。

4

1 回答 1

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 日志模式时,它会被复制,但会被从站忽略。)在复制进行时更改主站上的二进制日志记录格式,或者同时不更改它在从属设备上可能会导致复制失败,并出现错误,例如执行行事件时出错:'无法执行语句:无法写入二进制日志,因为语句是行格式并且 BINLOG_FORMAT = STATEMENT。

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

编辑:完成后不要忘记删除临时用户!

DROP USER 'tablesync'@'%';
于 2015-05-21T02:01:24.370 回答