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