阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL 8.0新特性之原子DDL

157次阅读
没有评论

共计 1631 个字符,预计需要花费 5 分钟才能阅读完成。

简介

MySQL 8.0 开始支持原⼦ DDL(atomic DDL),数据字典的更新,存储引擎操作,写⼆进制日志结合成了一个事务。在没有原⼦ DDL 之前,DROP TABLE test1,test2;如遇到 server crash,可能会有 test1 被 drop 了,test2 没有被 drop 掉。下面来看下在 MySQL 8.0 之前和 MySQL 8.0 数据字典的区别。

MySQL 8.0 新特性之原子 DDLMySQL 8.0 新特性之原子 DDL
 
在 MySQL8.0 之前,Data Dictionary 除了存在与.FRM, .TRG, .OPT ⽂件外,还存在于系统表中(MyISAM ⾮事务引擎表中),在 MySQL8.0,Data Dictionary 全部存在于 Data Dictionary Storage Engine(即 InnoDB 表中),这使 crash recovery 维持原⼦性成为了可能。
MySQL 8.0 新特性之原子 DDL
 

存储引擎⽀持

目前,只有 InnoDB 存储引擎⽀持原子 DDL,为了实现原子 DDL,Innodb 要写 DDL logs 到 mysql.innodb_ddl_log 表,这是⼀个隐藏在 mysql.ibd 数据字典表空间⾥的数据字典表。要看 mysql.innodb_ddl_log 中的内容,需要

MySQL 8.0 新特性之原子 DDL

查看 error log

MySQL 8.0 新特性之原子 DDL

原子 DDL 操作步骤

  1. 准备:创建所需的对象并将 DDL ⽇志写入 mysql.innodb_ddl_log 表中。DDL 日志定义了如何前滚和回滚 DDL 操作。

  2. 执行:执⾏ DDL 操作。例如,为 CREATE TABLE 操作执⾏创建。

  3. 提交:更新数据字典并提交数据字典事务。

  4. Post-DDL:重播并从 mysql.innodb_ddl_log 表格中删除 DDL ⽇志。为确保回滚可以安全执⾏⽽不引⼊不⼀致性,在此最后阶段执⾏⽂件操作(如重命名或删除数据文件)。这一阶段还从 mysql.innodb_dynamic_metadata 的数据字典表删除的动态元数据为了 DROP TABLE,TRUNCATE 和其它重建表的 DDL 操作。

⽆论事务是提交还是回滚,DDL 日志都会 mysql.innodb_ddl_log 在 Post-DDL 阶段重播并从表中删除。mysql.innodb_ddl_log 如果服务器在 DDL 操作期间暂停,DDL ⽇志应该只保留在表中。在这种情况下,DDL ⽇志会在恢复后重播并删除。

在恢复情况下,当服务器重新启动时,可能会提交或回退 DDL 事务。如果在重做⽇志和⼆进制日志中存在 DDL 操作的提交阶段期间执⾏的数据字典事务,则该操作被认为是成功的并且被前滚。否则,在 InnoDB 重放数据字典重做日志时回滚不完整的数据字典事务,并且回滚 DDL 事务。
 

原⼦ DDL ⽀持类型

• DROP TABLES , all tables dropped or none

• DROP SCHEMA, all entities in the schema are dropped, or none

• Note that atomic DDL statements will be rolled back or committed even in case of crash, e.g. RENAME TABLES

• CREATE TABLE would be successfully committed or rolled back (no orphan ibd left)

• TRUNCATE TABLE (including InnoDB tables with FTS AUX tables) would be successfully committed or rolled back

• RENAME TABLES, all or none

• ALTER TABLE successful or not done

示例

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

结论

在 MySQL8.0 之前,alter table 操作在 server crash 的情况下,会遗留.frm,.ibd 文件。MySQL8.0 能实现原⼦ DDL(包括 DROP TABLE, DROP SCHEMA, CREATE TABLE, TRUNCATE TABLE, ALTER TABLE),alter table 操作,在 server crash 的情况下,不会遗留.frm,.ibd 临时文件。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1631字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中