全部產品
Search
文件中心

PolarDB:DDL常見問題

更新時間:Jul 06, 2024

本文匯總了PolarDB-X 1.0上常見的DDL執行問題。

建表的時候執行出錯怎麼辦?

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 tablename指令來查看邏輯表是否建立成功。

    比如下面的例子展示了multi_db_multi_tbl的某個物理分表沒有建立成功時的情況

        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. 您可以使用等冪的方式重新執行建表或刪表操作,該操作會建立或刪除剩餘的物理表。
    CREATE TABLE IF NOT EXISTS table1
    (id int, name varchar(30), primary key(id))
    dbpartition by hash(id);  
    DROP TABLE IF EXISTS table1;

建索引失敗或加列失敗怎麼辦?

建索引失敗或加列失敗的處理方法跟上面建表失敗的處理類似。詳情請參見 如何處理DDL異常