3ノードのMySQL5.6 GaleraClusterを実行しています。すべてが同期していて問題ないように見えますが、ユーザーテーブルが同期していないことがわかりました。
ある特定のユーザーは、発行後に複製する可能性があると思った他のノードには存在しませんでした。
mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('10.0.0.10','haproxy_check'); FLUSH PRIVILEGES;"
すべてのノードでwsrepステータスとユーザーテーブルを再確認しました。他の2つのノードでコマンドを発行した後、コマンドは使用可能であり、galeraはまだ同期しているようです。
ここで何かが足りませんか?ガレラがユーザーテーブルを複製しないのはなぜですか?
既知の制限 にあります:
現在、レプリケーションはInnoDBストレージエンジンでのみ機能します。他のタイプのテーブルへの書き込みシステム(
mysql.*
)テーブルを含むは複製されません(この制限は、mysql。*テーブルを暗黙的に変更するCREATEUSERなどのDDLステートメントを除外します。複製)。ただし、MyISAMには実験的なサポートがあります。wsrep_replicate_myisam
システム変数を参照してください)
したがって、適切なCREATE USER
ステートメントを使用すると複製されますが、INSERT INTO mysql.user
ステートメントは複製されません。
GRANT
ステートメントがDDLステートメントと見なされ、複製されるかどうかにかかわらず、適切なリファレンスを見つけることができません。
上記のように、MyISAMは複製されません。 GRANTとCREATEUSER、およびシステムテーブルを操作する他のすべてのコマンドが複製されます。それらを常に使用すれば、ガレラのために問題が発生することはなく、基盤となる実装が変更されたときにスタックすることはありません。
Percona Toolkitのpt-show-grantsを使用して、1つのノードから許可を抽出し、それらをクラスターに注入することをお勧めします。