Назад | Перейти на главную страницу

Почему 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 не копирует таблицу пользователей?

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

В настоящее время репликация работает только с 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, чтобы извлечь свои гранты из одного узла и вставить их обратно в кластер.