全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
分布式关系型数据库 DRDS

DDL 常见问题处理

更新时间:2017-08-04 15:31:08

建表的时候执行出错怎么办?

DRDS DDL 的执行是一个分布式处理过程,出错可能导致各个分片表结构不一致,所以需要进行手动清理。

步骤如下:

  1. DRDS 会提供基本的错误描述信息,比如语法错误等。如果错误信息太长,则会提示用户调用 SHOW WARNINGS 的 SQL 命令来查看每个分库执行失败的原因。

  2. 可以通过 SHOW TOPOLOGY 命令来查看物理表的拓扑结构。SHOW TOPOLOGY的具体用法请参考 DRDS 控制指令

    1. SHOW TOPOLOGY FROM multi_db_multi_tbl;
    2. +------+-----------------+-----------------------+
    3. | ID | GROUP_NAME | TABLE_NAME |
    4. +------+-----------------+-----------------------+
    5. | 0 | corona_qatest_0 | multi_db_multi_tbl_00 |
    6. | 1 | corona_qatest_0 | multi_db_multi_tbl_01 |
    7. | 2 | corona_qatest_0 | multi_db_multi_tbl_02 |
    8. | 3 | corona_qatest_1 | multi_db_multi_tbl_03 |
    9. | 4 | corona_qatest_1 | multi_db_multi_tbl_04 |
    10. | 5 | corona_qatest_1 | multi_db_multi_tbl_05 |
    11. | 6 | corona_qatest_2 | multi_db_multi_tbl_06 |
    12. | 7 | corona_qatest_2 | multi_db_multi_tbl_07 |
    13. | 8 | corona_qatest_2 | multi_db_multi_tbl_08 |
    14. | 9 | corona_qatest_3 | multi_db_multi_tbl_09 |
    15. | 10 | corona_qatest_3 | multi_db_multi_tbl_10 |
    16. | 11 | corona_qatest_3 | multi_db_multi_tbl_11 |
    17. +------+-----------------+-----------------------+
    18. 12 rows in set (0.21 sec)
  3. 使用 CHECK TABLE tablename指令来查看逻辑表是否创建成功。比如下面的例子展示了 multi_db_multi_tbl 的某个物理分表没有创建成功。

    1. mysql> check table multi_db_multi_tbl;
    2. +-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
    3. | TABLE | OP | MSG_TYPE | MSG_TEXT |
    4. +-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
    5. | andor_mysql_qatest. multi_db_multi_tbl | check | Error | Table 'corona_qatest_0. multi_db_multi_tbl_02' doesn't exist |
    6. +-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
    7. 1 row in set (0.16 sec)
  4. 使用幂等的方式继续执行建表操作或删表操作,会创建或删除剩余的物理表。

    1. CREATE TABLE IF NOT EXISTS table1
    2. (id int, name varchar(30), primary key(id))
    3. dbpartition by hash(id);
    4. DROP TABLE IF EXISTS table1;

建索引失败、加列失败怎么办?

建索引失败、加列失败的处理方法跟上面建表失败的处理类似。具体请参考 DDL 异常处理文档。

本文导读目录