最佳实践—如何正确处理DDL异常

简介: 本文介绍处理DDL异常的常用方法。

概述

作为一款分布式数据库,PolarDB-X中的一条DDL语句背后隐藏着复杂的数据处理流程。例如创建一张拆分表时,实际上会在多个数据节点上创建很多张物理MySQL表。PolarDB-X的DDL处理框架拥有一定的容错能力,会保证DDL的正确性和一致性。但在特殊情况下,需要手动处理DDL异常。

处理步骤

下面以创建全局唯一二级索引为例,介绍处理DDL异常的步骤。创建全局唯一二级索引时,会校验列中数据的全局唯一性,如果发现列中数据不唯一,则会导致DDL的执行失败。此时DDL的状态可能变为“PAUSED”或“ROLLBACK_PAUSED”。

  1. 查看DDL的执行状态执行SHOW DDL语句,查看DDL的执行状态。只有当DDL状态为“PAUSED”或“ROLLBACK_PAUSED”时,才需要手动处理。
mysql> show ddl\G;
*************************** 1. row ***************************
           JOB_ID: 1359992239576580096
    OBJECT_SCHEMA: d1
      OBJECT_NAME: t1
           ENGINE: DAG
         DDL_TYPE: ALTER_TABLE
            STATE: PAUSED
BACKFILL_PROGRESS: 0%
 PHY_DDL_PROGRESS: 100%
         PROGRESS: 80%
       START_TIME: 2021-08-05 13:57:57.852
         END_TIME: 2021-08-05 13:58:30.804
 ELAPSED_TIME(MS): 32952
      PHY_PROCESS: 
       CANCELABLE: true
1 row in set (0.03 sec)
  1. 判断错误原因通常DDL异常发生时,会直接返回错误信息。有时DDL的错误信息可能难以获取(例如DDL是异步执行的),可以通过SHOW DDL RESULT语句查看近期执行过的DDL。在本示例中,从返回的错误信息中看到出现了UNIQUE KEY的冲突。
mysql> alter table t1 add unique global INDEX `idx_c2`(`c2`) DBPARTITION BY HASH(`c2`) tbpartition by hash(c2) tbpartitions 3;

ERROR 3009 (HY000): 12dfa9bc5c800000[d1]Failed to execute the DDL task. Caused by: ERR-CODE: TDDL-5321 Duplicated entry '100018' for key 'PRIMARY'
mysql> show ddl result\G;
1. row **
JOB_ID: 1359992239576580096
SCHEMA_NAME: d1
OBJECT_NAME: t1
DDL_TYPE: ALTER_TABLE
RESULT_TYPE: ERROR
RESULT_CONTENT: Failed to execute the DDL task. Caused by: ERR-CODE: TDDL-5321 Duplicated entry '100018' for key 'PRIMARY'
  1. 恢复或取消DDL大多数情况下,DDL出错时都能够自动恢复或取消。特殊情况需要手动处理DDL异常。各个DDL的容错策略可能不同,例如CREATE TABLE语句的容错策略是:自动尝试恢复,多次失败则自动取消。可以手动恢复或取消DDL任务。
    • 手动恢复:使用CONTINUE DDL语句可以恢复DDL任务。
    • 手动取消:使用CANCEL DDL语句可以取消DDL任务。有些DDL任务可能是无法取消的,可以通过SHOW DDL语句返回的“CANCELABLE”字段查看是否可以取消。
-- 处理完UNIQUE KEY的数据冲突后,可以使用continue ddl语句继续执行
mysql> continue ddl 1359992239576580096;
Query OK, 1 row affected (1.63 sec)
-- 如果不想再继续添加这个全局唯一二级索引,则可以直接取消任务
mysql> cancel ddl 1359992239576580096;
Query OK, 1 row affected (0.03 sec)
  1. 检查表一致性和正确性DDL执行成功后,建议使用以下语句检查表的一致性和表结构的正确性:
    • 使用CHECK TABLE语句检查表的一致性:如果返回结果为OK,说明表已经处于一致性状态,可以正常使用;如果返回报错信息,提示表处于不一致状态,请联系阿里云技术支持。
    • 使用SHOW CREATE TABLE语句查看表结构的正确性。
mysql> check table t1;
+-------+-------+----------+----------+
| TABLE | OP | MSG_TYPE | MSG_TEXT |
+-------+-------+----------+----------+
| d1.t1 | check | status | OK |
+-------+-------+----------+----------+
1 row in set (0.05 sec)
mysql> show create table t1\G;
1. row **
Table: t1
Create Table: CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL AUTO_INCREMENT BY GROUP,
`c2` bigint(20) DEFAULT NULL,
`c3` bigint(20) DEFAULT NULL,
PRIMARY KEY USING BTREE (`c1`),
UNIQUE GLOBAL KEY `idx_c2` (`c2`) COVERING (`c1`) DBPARTITION BY HASH(`c2`) TBPARTITION BY HASH(`c2`) TBPARTITIONS 3
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`c1`) tbpartition by hash(`c1`) tbpartitions 3
1 row in set (0.02 sec)
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
XML 数据挖掘 API
1688商品详情API接口指南
1688商品详情API是阿里巴巴为开发者提供的一套接口,用于获取1688平台上商品的详细信息,如商品ID、标题、价格、销量、评价、SKU、库存、主图等。通过注册认证、创建应用、构造请求和处理响应,用户可轻松调用API。其应用场景广泛,包括电商网站同步商品信息、内容管理系统生成商品页面、数据分析工具监测市场动态,以及第三方开发者构建比价或库存管理工具等,助力电商从业者优化销售策略与运营效率。
|
11月前
|
前端开发 UED 开发者
React 滚动监听 Scroll Listener
本文介绍React中实现滚动监听的方法,涵盖基本概念、常见问题及解决方案。通过监听`window`对象的`scroll`事件,开发者可以在用户滚动时触发自定义逻辑。文章详细探讨了冗余调用、组件卸载时未清理事件监听器、滚动位置不一致等常见问题,并提供了防抖、节流、保存滚动位置等解决方案。同时,强调了跨浏览器兼容性和性能优化的重要性,帮助开发者在实际项目中更好地实现滚动监听功能。
260 17
|
9月前
|
安全 开发者 Docker
Docker技术背景与应用:解决现代开发中的关键问题
Docker作为一种革命性的容器化技术,极大地改变了现代软件开发的方式。通过解决环境一致性、依赖管理、部署复杂性和资源利用率等问题,Docker为开发者提供了高效、灵活的开发和部署环境。尽管面临着一些挑战,但随着技术的发展和完善,Docker将继续在现代软件开发中发挥重要作用。作为全栈工程师,掌握并善用Docker技术,将为我们的开发工作带来更多便利和可能性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
监控 并行计算 搜索推荐
量子计算与医疗健康:个性化治疗的未来
量子计算以其强大的并行处理能力,正在医疗健康领域引发革命,尤其是在个性化治疗方面。本文探讨了量子计算在高效处理医疗数据、精确模拟生物分子、优化医疗资源分配等方面的应用,以及面临的挑战和未来前景。
|
存储 数据安全/隐私保护 UED
阿里云盘、腾讯云盘与百度网盘:云存储市场的三巨头
阿里云盘、腾讯云盘与百度网盘:云存储市场的三巨头
|
人工智能 前端开发 测试技术
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
本文介绍了 GPT-4 如何成为前端开发者的“神队友”,让开发变得更加高效愉快。无论是需求到代码的自动生成、快速调试和性能优化,还是自动化测试和技术选型,GPT-4 都能提供极大的帮助。通过智能生成代码、捕捉 BUG、优化性能、自动化测试生成以及技术支持,GPT-4 成为开发者不可或缺的工具,帮助他们从繁重的手动任务中解脱出来,专注于创新和创意。GPT-4 正在彻底改变开发流程,让开发者从“辛苦码农”转变为“效率王者”。
467 0
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与未来展望
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,重点分析了神经网络模型如循环神经网络(RNN)、长短期记忆网络(LSTM)和Transformer等在文本生成、语义理解及情感分析等任务中的卓越表现。通过具体案例展示了这些模型如何有效解决传统方法难以处理的问题,并讨论了当前面临的挑战及未来可能的发展方向,为进一步研究提供了新的视角和思路。
556 5
|
C语言
C语言中如何避免循环死循环
C语言中如何避免循环死循环
713 1
|
传感器 物联网 5G
五年将实现数据量超十倍增长,物联网漫游能力为何如此重要?
在特定物联网场景中,尤其是针对具有移动性特点的物联网终端,漫游功能是一项必备的网络支撑能力。随着具有移动性物联网节点大幅增长,漫游的重要性不断凸显。
496 15
五年将实现数据量超十倍增长,物联网漫游能力为何如此重要?
|
运维 Kubernetes Cloud Native
KubeVela 再升级:交付管理一体化的云原生应用平台!
背景随着云原生时代的到来,开发者为了构建符合云原生的应用架构,不得不面对大量云和基础设施的复杂 API ,不仅使用难度大、学习门槛高,还会因为直接操作底层基础设施产生很大的稳定性风险。 Kubernetes 很好的帮助基础设施提供了统一的 API 集成界面,但是其定位是“为平台构建者提供的平台”,所以对于上层应用开发者而言就缺失了这样一层“以应用为中心”的使用界面。开放应用模型( OAM) 应运而
KubeVela 再升级:交付管理一体化的云原生应用平台!