Por que o MySQL Galera não replica a tabela de usuários?

3

Estou executando um cluster de 3 nós do MySQL 5.6 Galera. Tudo está em sincronia e parece bem, mas como acabei de descobrir a tabela de usuários não estava em sincronia.

Um usuário em particular não estava presente nos outros nós em que achei que poderia replicá-lo após a emissão:

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

Eu verifiquei novamente o status do wsrep e as tabelas do usuário em todos os nós. Depois de emitir o comando nos outros 2 nós, ele estará disponível e a galera ainda estará em sincronia.

Estou sentindo falta de algo aqui? Por que a galera não está replicando a tabela de usuários?

    
por merlin 09.09.2015 / 10:44

2 respostas

6

Está nas limitações conhecidas :

Currently replication works only with the InnoDB storage engine. Any writes to tables of other types, including system (mysql.*) tables are not replicated (this limitation excludes DDL statements such as CREATE USER, which implicitly modify the mysql.* tables — those are replicated). There is however experimental support for MyISAM - see the wsrep_replicate_myisam system variable)

Portanto, usar a declaração CREATE USER adequada será replicada, mas a instrução INSERT INTO mysql.user não será.

Não consigo encontrar uma referência adequada se as declarações GRANT forem consideradas instruções DDL e serão replicadas ou não.

    
por 09.09.2015 / 12:22
1

Como acima, MyISAM não é replicado. GRANT e CREATE USER e todos os outros comandos que manipulam tabelas do sistema são replicados. Use-os sempre e você não terá problemas por causa da galera e não ficará preso quando / se uma implementação subjacente for alterada.

Você pode usar o pt-show-grants do Percona Toolkit para extrair suas concessões de um nó e injetá-las de volta no cluster.

    
por 18.09.2015 / 10:55