pt-table-sync не может изменить binlog_format
У меня есть мастер-мастер кластер Percon производства. Вторичный мастер имеет ошибку репликации и с помощью pt-table-sync я пытаюсь синхронизировать мастеры. Похоже, что binlog_format="STATEMENT" необходим для любой операции синхронизации. Ниже приведена ошибка синхронизации pt-таблицы
pt-table-sync --verbose --dry-run --sync-to-master h=,u=root,p=,D=,t=
Не удалось / ! 50108 SET @@ binlog_format: = 'STATEMENT' /: DBD:: mysql:: db do ошибка: доступ запрещен; вам нужна (хотя бы одна из) привилегий SUPER для этой операции [для оператора "/ ! 50108 SET @@ binlog_format: = 'STATEMENT' /"] в строке /usr/local/bin/pt-table-sync 10827.
Для этого инструмента требуется binlog_format=STATEMENT, но для текущего binlog_format задано значение MIXED, и при попытке его изменить произошла ошибка. Если работает MySQL 5.1.29 или новее, для установки binlog_format требуется привилегия SUPER. Вам нужно вручную установить binlog_format на "STATEMENT" перед запуском этого инструмента. Вызов отката () из-за DESTROY без явного отсоединения () DBD:: mysql:: db handle empowern_aws; host = ., ,;mysql_read_default_group= клиент в /usr/local/bin/pt-table-sync line 10830.
Поскольку это производственный кластер, существует ли способ заставить pt-table-scan работать без полного торможения репликации? Будет ли ручное обновление binlog_format на обоих устройствах влиять на репликацию соответствующих ведомых устройств?
Ценю помощь.
1 ответ
Поскольку это производственный кластер, существует ли способ заставить 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 Server может установить свой собственный и только свой собственный двоичный формат ведения журнала (true, если binlog_format установлен с глобальной областью действия или областью сеанса). Это означает, что изменение формата ведения журнала на ведущем устройстве репликации не приводит к тому, что ведомое устройство изменяет свой формат ведения журнала, чтобы соответствовать. (При использовании режима STATEMENT системная переменная binlog_format не реплицируется; при использовании режима ведения журнала MIXED или ROW она реплицируется, но ведомым игнорируется.) Изменение формата двоичного ведения журнала на главном сервере во время репликации или без изменения также это на ведомом устройстве может привести к сбою репликации с ошибками, такими как Ошибка выполнения строки: "Невозможно выполнить инструкцию: невозможно записать в двоичный журнал, так как инструкция имеет формат строки и BINLOG_FORMAT = STATEMENT."
В вашем случае, если ведомые / реплики имеют binlog_format=MIXED, и вы изменили ведущие на binlog_format = STATEMENT, ведомые / реплики должны быть в состоянии обрабатывать любую репликацию на основе STATEMENT.
РЕДАКТИРОВАТЬ: не забудьте удалить временного пользователя, когда вы закончите!
DROP USER 'tablesync'@'%';