新特性解读 | MySQL 8.0 之原子 DDL

MYSQL8.0新特效详解 锁被去掉,采用了区间的方式,区间内的所有日志是原子性的,都是串行化执行,从而显著提高了性能。新增了聚合函数JSON_ARRAYAGG()和JSON_OBJECTAGG(),以及行内操作符->>,这些改进使得JSON数据的处理更加便捷和高效。这些改进使得索引的使用更加灵活和高效。除了以上提到的特性外,MYSQL8.0还包含了许多其他改进和优化,如字符集和排序规则的支持、复制和集群功能的增强等。MYSQL8.0确实带来了许多引人注目的新特性,这些特性不仅提高了数据库的性能,还增强了数据的安全性和管理的灵活性。 阅读详情

作者:杨奇龙
网名“北在南方”,8 年 DBA 老兵,目前任职于杭州有赞科技 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。
本文来源:转载自公众号-yangyidba
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


本文关键字:原子 DDL 、数据字典

原子 DDL

听到原子这个关键字大家是不是联想到事务的 ACID 的原子性?两者相似,事务/语句执行要么全部成功,要么全部失败。MySQL 8.0 之前的版本 DDL 是非原子性的,对于多条 sql 构成的ddl语句比如 rename table t1 to t1_bak,t2 to t2_bak;
执行过程中如果遇到系统异常 crash,有可能出现表 t1 被 rename,但是 t2 没有被 rename 的情况。出现该情况的原因就是 MySQL 不支持原子的 DDL。

MySQL 8.0 之前的数据字典结构图:

从图中我们可以看出,元数据信息在存储于 .FRM .TRG .OPT文件系统,MyISAM 引擎的系统表里,以及 Innodb 存储引擎的系统表。分裂成多处这样的架构导致在系统异常的情况下很容易造成数据的不一致。

MySQL 8.0 的数据字典结构图:

从图中我们明显可以看出 Data Dictionary 全部存在于由 InnoDB 表构成的系统表中
Data Dictionary Table。当遇到 crash recovery 的时候,系统可以安全的进行事务回滚,保障 DDL 语句的原子性。说了这么多,我们动手实践一下 。

案例实践

对比 5.7 vs 8.0 的测试图,MySQL 5.7.22 DDL 操作删除两个表,其中一个 t2 不存在。

MySQL 8.0.20 的原子性操作,

MySQL 8.0 支持原子性,DDL 失败之后 t1 还在,但是5.7 版本中 t1 就被删除了。

原子 DDL 操作步骤

InnoDB 存储引擎执行 DDL 时是分阶段进行的。比如 ALTER TABLE,可能会在执行提交阶段之前多次执行准备阶段和执行阶段的操作。

  • 准备:创建所需的对象,并且将 DDL 日志写入 mysql.innodb_ddl_log 表中。DDL 日志定义了如何前滚和回滚相应的 DDL 操作。
  • 执行:执行 DDL 操作。例如,为 CREATE TABLE 执行创建操作。
  • 提交:更数据字典并提交数据字典事务。
  • Post-DDL:重放并删除 mysql.innodb_ddl_log 表中的 DDL 日志。为了能够安全地执行回滚操作而不会导致不一致性,对于文件的操作,例如重命名数据文件或移动数据文件,放在这个最后的阶段执行。这个阶段还会为 DROP TABLE、TRUNCATE TABLE 以及其他重建表的 DDL 操作删除数据字典表 mysql.innodb_dynamic_metadata 中的动态元数据。

无论事务被提交还是回滚,在 Post-DDL 阶段都会重放并删除 mysql.innodb_ddl_log 表中的 DDL 日志。只有当服务器在执行 DDL 操作的过程中出现故障时,才会在 mysql.innodb_ddl_log 表中保留 DDL 日志。这种情况下,在服务器恢复之后执行 DDL 日志的重放和删除。

对于需要进行恢复的情况,服务器重启之后,可能执行 DDL 事务的提交,也可能执行事务的回滚。如果在提交阶段执行的数据字典事务已经记录在重做日志和二进制日志中,就会认为 DDL 操作已经成功,并且执行前滚操作。否则,当 InnoDB 重放数据字典重做日志的时候,将会回滚不完整的数据字典事务,并且回滚 DDL 事务。

查看 DDL 日志

为了支持 原子 DDL,InnoDB 在执行 DDL 语句时将日志写入隐藏的数据字典表mysql.innodb_ddl_log中,该表存储在 mysql.ibd 数据字典表空间。所谓隐藏数据字典表,就是在不能以正常的方式直接访问,得在调试 debug 模式下访问隐藏表。

CREATE TABLE mysql.innodb_ddl_log (

各个字段的注释,

id:每条 DDL 日志记录的唯一标识符。

另外就是我们可以通过设置 innodb_print_ddl_logs=1 和 log_error_verbosity=3 在 MySQL 的 系统日志里面查看 DDL log,比如我运行的 MySQL 8.0 是在 docker 中 ,使用 docker logs mysql8.0 。

日志表示执行 create table t2 的 ddl 日志过程。

MySQL 8.0 原子 DDL 使用范围

支持的 ddl 范围
  • 与表相关的原子 DDL 包括:

数据库、表空间、表、索引的 CREATE、ALTER 以及 DROP 语句,以及 TRUNCATE TABLE 语句。

  • 与表无关的原子 DDL 包括:

存储过程、触发器、视图以及用户定义函数 UDF 的 CREATE 和 DROP 语句,以及适用的 ALTER 语句。

帐户管理语句:用户和角色的 CREATE、ALTER、DROP 语句,以及适用的 RENAME 语句,以及 GRANT 和 REVOKE 语句。

不支持的 ddl 范围
  • 非 InnoDB 存储引擎上的表相关 DDL 语句。
  • INSTALL PLUGIN 和 UNINSTALL PLUGIN 语句。
  • INSTALL COMPONENT 和 UNINSTALL COMPONENT 语句。
  • CREATE SERVER、ALTER SERVER 以及 DROP SERVER 语句。

小结

本文基本就是官方文档加上系统开发团队 blog 内容的二道贩子,理解不正确的,大家可以积极指正。其他的还是推荐看看官方文档。

MySQL8.0 DDL原子性特性及实现原理 主要介绍了MySQL8.0 DDL原子性特性及实现原理,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下 立即下载

相关推荐

TSMaster实战:手把手教你用C小程序发送自定义CAN报文(附完整代码)

本文详细解析了如何使用TSMaster的C小程序功能实现自定义CAN报文发送,涵盖环境配置、DBC集成、按键触发等实战技巧。通过完整代码示例和高级调试方法,帮助汽车电子工程师快速掌握TSMaster在CAN总线通信中的灵活应用,提升开发效率。

weixin_29184371的博客 574

【MySQL】 MySQL 8.0 新特性之原子 DDL

MySQL 8.0 开始支持原子数据定义语言 (DDL) 语句,即。。该操作要么被提交(相应的变更被持久化到数据字典、存储引擎和二进制日志中);要么被回滚(执行过程中出现错误,甚至是服务器宕机)。不是。一条 DDL 语句(无论是原子的还是其他的),都会隐式结束当前会话中活动的任何事务,就像在执行语句之前执行了一样。这意味着 DDL 语句不能在另一个事务执行,也不能在事务控制语句:中执行,或与同一事务中的其他语句组合。MySQL 8.0 中引入 MySQL 数据字典,使原子 DDL 成为可能。

迪曼奥特迦-博客 1835

手把手解决AutoDock安装那些坑:从autogrid报错到.map文件生成(Win10/11环境)

本文详细解析了在Win10/11环境下安装AutoDock时遇到的常见问题,特别是autogrid报错和.map文件生成失败的情况。通过实战验证的解决方案,包括环境变量设置、Python版本管理、文件权限调整等,帮助用户顺利完成安装并提升分子对接研究效率。

weixin_42548888的博客 198

MySQL8.0之DDL语句(详细全面)

字符集、整数类型、索引、日期格式

关于自己学习笔记哟 1999

MFC工具栏增加EditBox和Button

1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed = new CMFCToolBarEditBoxButton(ID_EDIT_SEED, GetCmdMgr()-&.

学习是为了探索这个世界的本质 802

LVGL 离线字体转换lv_font_conv本地安装

LVGL FONT CONV 离线版本

liu132641的专栏 3385

mysql 5.7 ddl 原子_MySQL8.0新特性之原子DDL语句

原标题:MySQL8.0新特性之原子DDL语句MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并将适用的更改保留到数据字典,存储引擎和二进制日志,或者回滚事务。通过在MySQL 8.0中引入MySQL数据字典,可以实现Atomic...

weixin_42360972的博客 373

第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

图形/计算GPU的驱动与虚拟化技术分享园地 2463

详谈 MySQL 8.0 原子 DDL 原理

文章字数 3800+,阅读时间 15 分钟。背景MySQL 5.7 的字典信息保存在非事务表中,并且存放在不同的文件中(.FRM,.PAR,.OPT,.TRN,.TRG 等)。所有 DDL 操作都不是 Crash Safe,而且对于组合 DDL(ALTER 多个表)会出现有的成功有的失败的情况,而不是总体失败。这样主从复制就出现了问题,也导致基于复制的高可用系统不再安全。MySQL 8.0 推出新...

杨建荣的学习笔记 655

开源项目-智能算法中台管理系统

智能算法中台管理系统,系统主要有样本中心,算法中心,模型中心等模块

u010479989的博客 2997

Codex 自定义模型操作指南:CLI 与桌面客户端双端实操

检查版本 codex --version # 预期输出类似:codex-cli 0.133.0-alpha.1 # 如未安装 npm install -g @openai/codex假设你要接入DeepSeek,在# 临时设置(当前终端会话有效)export DEEPSEEK_API_KEY="sk-你的 DeepSeek API Key"# 永久设置(推荐,写入 shell 配置)

篮球界最会写bug的人;程序猿中打球最菜的人。 454

【MySQL精通之路】MySQL8.0新增功能-原子DDL语句支持

MySQL8.0中支持了单条和多条DDL语句执行时的原子性(仅限Innodb)

Anakki的博客 1246

LeRobot 入门教程(一)软件环境、部署流程及摄像头配置

🤖 LeRobot:开源机器人学习平台 摘要:LeRobot是一个基于PyTorch的开源机器人学习平台,提供模型、数据集和工具,旨在降低机器人技术门槛。平台包含经过验证的模仿学习和强化学习方法,并提供预训练模型、人类演示数据集及模拟环境。安装需从源码获取,支持Python 3.10环境,可选扩展包括仿真环境(如gym-aloha)、电机控制(Dynamixel/Feetech SDK)和实验跟踪(Weights & Biases)。该平台托管在HuggingFace,并设有社区Discord频道

2506_90492529的博客 3416

mysql8 create table 语法错误_新特性解读 | MySQL 8.0 之原子 DDL

作者:杨奇龙网名“北在南方”,8 年 DBA 老兵,目前任职于杭州有赞科技 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。本文来源:转载自公众号-yangyidba*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文关键字:原子 DDL 、数据字典原子 DDL听到原子这个关键字大家是不是联想到事务的 ACID 的原子性?两者相似,事务...

weixin_39938331的博客 587

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ddl不显示触发器 navicat_新特性解读 | MySQL 8.0 之原子 DDL

作者:杨奇龙网名“北在南方”,8 年 DBA 老兵,目前任职于杭州有赞科技 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。本文来源:转载自公众号-yangyidba*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文关键字:原子 DDL 、数据字典原子 DDL听到原子这个关键字大家是不是联想到事务的 ACID 的原子性?两者相似,事务...

weixin_39860757的博客 193

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MySQL 8.0新特性全面解读:窗口函数、CTE、原子DDL等核心功能深度剖析

自2018年正式发布以来,MySQL 8.0作为Oracle公司推出的重要开源数据库版本,标志着MySQL进入了一个全新的技术发展阶段。这一版本不仅继承了MySQL一贯的开源理念,还在性能、功能及稳定性方面实现了显著突破,成为企业级应用和开发者社区广泛采用的核心数据库解决方案。截至2025年,全球超过70%的企业级应用已升级至MySQL 8.0,其性能优化和功能扩展在实际生产环境中得到了充分验证。MySQL的版本演进历程反映了开源数据库技术的持续创新。

zuiyuelong的博客 1125

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MySQL 常见面试题汇总

一、基础与架构特性InnoDBMyISAM事务支持不支持锁粒度行级锁表级锁外键支持不支持缓存数据+索引仅索引主键必须有可以没有崩溃恢复支持较差应用场景OLTPOLAP/只读。

2301_77574331的博客 535

MySQL面试核心考察维度与高频问题解析

关系型数据库是数据存储和管理的核心技术之一,其中MySQL凭借其高性能和可靠性成为最流行的开源数据库。数据库索引通过B+树等数据结构实现快速数据检索,事务机制则通过MVCC和锁保证数据一致性。在工程实践中,SQL优化和性能调优直接影响系统吞吐量,比如通过合理设计索引可以提升查询效率40%以上。高可用方案如主从复制和分库分表能有效应对海量数据场景,其中InnoDB存储引擎的B+树索引结构和事务隔离级别是面试高频考点。掌握这些核心原理对开发分布式系统和数据密集型应用至关重要,也是技术面试中评估候选人数据库能力的

weixin_29758911的博客 229

【Mysql】最全的 MySQL 8.0 新特性解读

解决非专业人员安装数据库后默认初始化数据库参数默认值偏低的问题,让MySQL自适应的调整上面四个参数,前提是服务器是专用来给MySQL数据库的,如果还有其他软件或者资源或者多实例MySQL使用,不建议开启该参数,本文以MySQL8.0.19为例。MySQL 8.0 对于分区表功能进行了较大的修改,在 8.0 之前,分区表在Server层实现,支持多种存储引擎,从 8.0 版本开始,分区表功能移到引擎层实现,目前MySQL 8.0 版本只有InnoDB存储引擎支持分区表。

生如夏花的博客 3139

深入解读MySQL8.0 新特性 :Crash Safe DDL

前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别。而实际上innodb本身也存储有元数据信息。这给ddl带来了一定的挑战,因为这种架构无法做到ddl的原子化,我们在线上经常能够看到数据目录下遗留的临时文件,或者类似server层和innodb层列个数不一致之类的错误。甚至某些ddl可能还遗留元...

阿里云云栖号 1056
上一篇: 第08期:有关 MySQL 字符集的注意事项
下一篇: 第15问:快速找到 binlog 中是否有大事务
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值