Почему MySQL Galera не реплицирует пользовательскую таблицу?

Я работаю с 3-мя узлами MySQL 5.6 Galera Cluster. Все синхронизировано и выглядит нормально, но, как я только что узнал, пользовательская таблица не была синхронизирована.

Один конкретный пользователь не присутствовал на других узлах, где я думал, что он может повторить его после выдачи:

mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('10.0.0.10','haproxy_check'); FLUSH PRIVILEGES;"

Я дважды проверил состояние wsrep и пользовательские таблицы на всех узлах. После выдачи команды на двух других узлах она становится доступной, и кажется, что galera все еще синхронизирован.

Я что-то здесь упускаю? Почему Galera не копирует пользовательскую таблицу?

2 ответа

Решение

Это в известных ограничениях:

В настоящее время репликация работает только с механизмом хранения InnoDB. Любые записи в таблицы других типов, в том числе системные ( mysql.* ) таблицы не реплицируются (это ограничение исключает операторы DDL, такие как CREATE USER, которые неявно изменяют таблицы mysql.* - они реплицируются). Однако существует экспериментальная поддержка MyISAM - см. wsrep_replicate_myisam системная переменная)

Так что используя правильное CREATE USER заявление будет копировать, ваш INSERT INTO mysql.user Заявления не будет.

Я не могу найти подходящую ссылку, если GRANT заявления считаются заявлениями DDL и будут копироваться или нет.

Как указано выше, MyISAM не реплицируется. GRANT и CREATE USER и все другие команды, которые управляют системными таблицами, реплицируются. Используйте их всегда, и у вас не будет проблем из-за galera, и вы не застрянете, когда / если базовая реализация изменится.

Возможно, вы захотите использовать pt-show-grants из Percona Toolkit для извлечения ваших грантов из одного узла и внедрения их обратно в кластер.

Другие вопросы по тегам