MySQL のマルチマスターのソリューションである、PXC と Group Replication の比較記事が続きます・・・
PXC では DDL は KILL できない
Percona XtraDB Cluster (Galera) では DDL実行中は、すべてのノードで更新が止まると、以前のエントリーで書きました。
うっかりDDLを流してしまって、更新が止まってしまい、DDLをKILLしようとしても、PXCでは、このように、KILLさせてくれません。
mysql> KILL 18; ERROR 1095 (HY000): You are not owner of thread 18
PXCでは更新を一旦ブロックし、全てのノードで同時にDDLを実行します(この仕組みを TOI (Total Order Isolation)
と呼びます)。ここで、あるノードだけDDLがKILLされてしまうと、ノード間でテーブル定義が一致しない状態になってしまいます。不一致を回避するため「一度流したDDLは途中ではキャンセルできない」仕様になっていると推測しています。
これは、MySQLにはない制約です。PXCは、(Group Replicationの Primary/Secondaryのような)ノードに役割を持たせない設計となっている一方で、その代償として、MySQLにはない制約があります。
Group Replication は大丈夫
Group Replication (Single Primary 運用) では、普通にKILLできます。 Group Replication は、 Single Primary 運用を前提とすることで、特に追加の制約が少なく運用できるように工夫されているように感じました。
> ALTER TABLE sbtest2 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ^C-- query aborted Query OK, 0 rows affected (2.6369 sec)
※ Single Primary を off にすると、どうなるかは検証してない