MySQL 8.0新特性之原子DDL

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

简介

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

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

时间: 2024-11-09 01:59:07

MySQL 8.0新特性之原子DDL的相关文章

MySQL8.0新特性——支持原子DDL语句

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

Mysql 8.0 新特性测试

Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Postgresql和Mariadb中早已存在role这个特性. create role role_test; grant select,insert,delete,update on zhongwc.tab01 to role_test; create user 'user1'@'%' identif

MySQL 8.0新特性

一.MySQL 8.0中添加的功能 1.新的系统字典表 整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储 2.支持DDL 原子操作 InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作 3.安全和用户管理 新增caching_sha2_password认证插件,并且是默认的身份认证插件.性能和安全方面加强 权限支持role 新增密码

MySQL 8.0新特性 -- bit-wise操作

bit函数和操作符 名称 说明  &  按位与  >>  右移  <<  左移  ^  按位异或  bit_count()  返回位数  |  按位或  ~  按位取反 在mysql8之前,bit函数和操作符只是支持64位的整数(bigint),返回值也是64位的整数(bigint).所以最大支持到64位.非bigint参数会被转化成bigint,然后参与操作,所以可能会发生截断. 在8.0中,bit函数和操作符支持二进制字符串类型的参数,比如binary.varbinar

mysql 8.0 新特性

https://www.cnblogs.com/coco-caiyuan/articles/11526994.html https://www.cnblogs.com/songgj/p/10658916.html 原文地址:https://www.cnblogs.com/newlangwen/p/11792055.html

MySQL8.0新特性【转】

Server层,选项持久化 mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 512 | | mysqlx_max_connections | 100 | +------------------------+-------

MySQL 5.7 新特性大全和未来展望

MySQL 5.7 新特性大全和未来展望 jopen 2015-12-31 16:06:46 • 发布 摘要:美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计.之前在「高可用架构」发表的<单表 60 亿记录等大数据场景的 MySQL 优化和运维之道>广受好评. 本文转自微信公众号: 高可用架构 作者:杨尚刚 引用 美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.

Java基础加强-(注解,类加载器,servlet3.0新特性)

1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类.构造器.方法.成员变量.参数和局部变量的声明,这些信息被存储在Annotation的“name=value”对中. Annotation能被用来为程序元素(类.方法.成员变量等)设置元数据,比如一段代码的作者或者告诉编译器禁止一些特

Day07 jdk5.0新特性&Junit&反射

day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装MyEclipse 先安装了JDK ? MyEclipse介绍 ? MyEclipse是Eclipse的一个插件: MyEclipse是需要花钱的: MyEclipse官网不在欢迎中国人登录: ? MyEclipse使用 ? 1 创建项目 选择工作空间: 工作空间路径不能有空格和中文: 工作空间以班名