码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 8.0新特性之原子DDL

时间:2018-12-10 13:55:40      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:技术   一个   views   rac   creat   参考   dict   rop   元数据   

 

文章来源:爱可生云数据库

 

简介

 

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

技术分享图片技术分享图片
 
在MySQL8.0 之前,Data Dictionary除了存在与.FRM, .TRG, .OPT ?件外,还存在于系统表中(MyISAM ?事务引擎表中),在MySQL8.0 ,Data Dictionary 全部存在于Data Dictionary Storage Engine(即 InnoDB表中),这使crash recovery 维持原?性成为了可能。

 

技术分享图片

 

 

存储引擎?持

 

 

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

查看error log

技术分享图片

原子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

 

 

示例

技术分享图片
技术分享图片

结论

 

在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临时文件。让我们?起期待MySQL8.0 GA的到来吧!

 

参考:

https://www.youtube.com/watch?v=jM53hSU9L70

https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html

MySQL 8.0新特性之原子DDL

标签:技术   一个   views   rac   creat   参考   dict   rop   元数据   

原文地址:https://www.cnblogs.com/DataArt/p/10095653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!