我正在运行一个3节点的MySQL 5.6 Galera集群。 一切都是同步的,看起来不错,但我发现用户表不同步。
一个特定的用户没有出现在我认为可能在发布之后复制它的其他节点上:
mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('10.0.0.10','haproxy_check'); FLUSH PRIVILEGES;"
我加倍检查所有节点上的wsrep状态和用户表。 在其他两个节点上发出命令后,它可用,加莱拉似乎仍然同步。
我在这里错过了什么? 为什么galera不复制用户表?
这是在已知的限制 :
目前,复制仅适用于InnoDB存储引擎。 对其他types表( 包括system(
mysql.*
)表)的任何写操作都不会被复制(这个限制不包括DDL语句,比如CREATE USER,它隐式地修改了mysql。*表 – 这些表被复制了)。 然而,MyISAM有实验支持 – 请参阅wsrep_replicate_myisam
系统variables)
所以使用适当的CREATE USER
语句将复制,你的INSERT INTO mysql.user
语句不会。
如果GRANT
语句被认为是DDL语句并且将被复制,我不能完全find合适的参考。
如上MyISAM不复制。 GRANT和CREATE USER以及操纵系统表的所有其他命令都将被复制。 总是使用它们,你将不会因为加莱拉而陷入困境,而且当底层实现发生变化时,不会卡住。
您可能想要使用Percona Toolkit中的pt-show-grants来从一个节点提取您的授权并将其注入到群集中。