このトピックでは、PolarDB-X 1.0 における DDL 実行エラーに関するよくある質問とその対応方法について説明します。
テーブル作成に失敗した場合の対応方法
PolarDB-X 1.0 では、DDL 文が複数のシャードにまたがって分散モードで実行されます。途中でエラーが発生した場合、一部のシャードでは物理テーブルが作成される一方で、他のシャードでは作成されない状態となり、スキーマが不整合な状態になる可能性があります。そのため、失敗したシャードを特定し、手動で操作を完了またはクリーンアップする必要があります。
ステップ 1:エラーの詳細を確認します。
PolarDB-X 1.0 は、構文エラーなどの基本的なエラー情報を直接表示します。エラーメッセージが途中で切り捨てられている場合は、SHOW WARNINGS を実行して、各データベースシャードにおける完全な失敗原因を確認してください。
ステップ 2:物理テーブルのトポロジーを確認します。
SHOW TOPOLOGY を実行し、存在する物理テーブルおよびそれらが属するシャードを確認します:
SHOW TOPOLOGY FROM multi_db_multi_tbl;期待される出力例:
+------+-----------------+-----------------------+
| ID | GROUP_NAME | TABLE_NAME |
+------+-----------------+-----------------------+
| 0 | corona_qatest_0 | multi_db_multi_tbl_00 |
| 1 | corona_qatest_0 | multi_db_multi_tbl_01 |
| 2 | corona_qatest_0 | multi_db_multi_tbl_02 |
| 3 | corona_qatest_1 | multi_db_multi_tbl_03 |
| 4 | corona_qatest_1 | multi_db_multi_tbl_04 |
| 5 | corona_qatest_1 | multi_db_multi_tbl_05 |
| 6 | corona_qatest_2 | multi_db_multi_tbl_06 |
| 7 | corona_qatest_2 | multi_db_multi_tbl_07 |
| 8 | corona_qatest_2 | multi_db_multi_tbl_08 |
| 9 | corona_qatest_3 | multi_db_multi_tbl_09 |
| 10 | corona_qatest_3 | multi_db_multi_tbl_10 |
| 11 | corona_qatest_3 | multi_db_multi_tbl_11 |
+------+-----------------+-----------------------+
12 rows in set (0.21 sec)ステップ 3:論理テーブルのステータスを確認します。
論理テーブル名に対して CHECK TABLE を実行し、そのステータスを確認します:
mysql> check table multi_db_multi_tbl;いずれかのシャードで物理テーブルが欠落している場合、該当シャードに対してエラーが表示されます:
+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
| TABLE | OP | MSG_TYPE | MSG_TEXT |
+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
| andor_mysql_qatest. multi_db_multi_tbl | check | Error | Table 'corona_qatest_0. multi_db_multi_tbl_02' doesn't exist |
+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
1 row in set (0.16 sec)ステップ 4:冪等モードで DDL を再実行します。
IF NOT EXISTS または IF EXISTS を使用して、残りの物理テーブルに対して安全に操作を再試行します:
-- 欠落している物理テーブルを再作成
CREATE TABLE IF NOT EXISTS table1
(id int, name varchar(30), primary key(id))
dbpartition by hash(id);
-- または、すべての物理テーブルをクリーンアップ
DROP TABLE IF EXISTS table1;インデックス作成またはカラム追加に失敗した場合の対応方法
同様の手順で対応します:まず SHOW WARNINGS を実行してエラーの詳細を確認し、次に SHOW TOPOLOGY で影響を受けるシャードを特定し、さらに CHECK TABLE で現在の状態を検証したうえで、DDL 文の冪等形式を用いて再実行してください。
詳細については、「DDL 例外のトラブルシューティング」をご参照ください。