MySQL-8.0.x DDL 原子性】的更多相关文章

[1.mysql-8.0.x 新特性之 DDL 原子性] 在没有 DDL 原子性之前 DBA 对 DDL 语句基本上是无能为力的,比如说 DDL 执行的过程中停电了,这下就只有天知道了.实现上最终的愿景还是希望得到一个确定的结果,要么成功了,要么失败了.mysql-8.0.x 带来了 DDL 原子性 [2.mysql-5.6.x DDL 操作的表现] mysql-5.6.x 并不保证原子性,所以当我们一次 drop 多个表的时候就有可能遇到部分成功的情况 mysql> select @@vers…
柯煜昌 青云科技研发顾问级工程师 目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验. 文章字数 3800+,阅读时间 15 分钟 背景 MySQL 5.7 的字典信息保存在非事务表中,并且存放在不同的文件中(.FRM,.PAR,.OPT,.TRN,.TRG 等).所有 DDL 操作都不是 Crash Safe,而且对于组合 DDL(ALTER 多个表)会出现有的成功有的失败的情况,而不是总体失败.这样主从复制就出现了问题,也导致基于复制的高可用系统不再安全…
在MySQL 5.5/5.6/5.7版本中,DDL操作是非原子型操作,在执行过程中遇到实例故障重启,可能导致DDL没有完成也没有回滚.如 1.执行DROP TABLE T1,T2操作,实例重启恢复后,表T1被删除,表T2仍存在. 2.执行CREATE TABLE操作,创建过程中实例重启,表创建失败但是有部分表文件残留,导致后续DDL执行失败.   问题原因: 1.在MySQL Server层使用MyISAM引擎的系统表来存放元数据信息,故障恢复时不能保证数据一致性 2.在存储引擎层不同引擎使用不…
1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义等信息:innodb层也有自己一套元数据,包括表信息,索引信息等,这两套元数据并没有机制保证一致性,这就导致了在异常情况下可能存在元数据不一致问题,一种典型场景下,删表操作,sever层的frm已经成功删除了,但引擎层数据字典并没有更新,导致再建重名表失败的问题.同样的,比如drop tabl…
Edit MySQL8.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 文…
    由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gcc耗时较长,与测试目的不符.暂用官方rpm包安装.以便达到快速测试目的. 以下新功能介绍中,跟日常工作强相关大都经过测试.时间有限,未能面面俱到,有兴趣自行测试. 以下大部分来源自 https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html…
MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3.并行redo log,并提升redo log的I/O性能 4.新增倒序索引 5.增强CBO特性 6.消除了buffer pool mutex(Percona的贡献) 7.自增ID持久化 8.行锁增加SKIP LOCKED和NOWAIT特性选项 9.新增事务CATS特性,大大提升事务性能(Michig…
一  innodb的优化  1 已完全不支持myisam引擎  2 将自增主键的计数器持久化到redo log中.每次计数器发生改变,都会将其写入到redo log中.如果数据库发生重启,InnoDB会根据redo log中的计数器信息来初始化其内存值.为了尽量减小对系统性能的影响,计数器写入到redo log中,并不会马上刷新.解决了主键分配不正常的情况  3 针对select for update操作等待处理   select for update nowait/skip locked 不会…
1.简介 MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件.非事务性存储引擎表中.本文将会介绍MySQL 8.0对数据字典的改进,以及改进带来的好处.影响以及局限性. 2.数据字典 2.1.新版本之前的数据字典 数据字典是数据库重要的组成部分之一,那么什么是数据字典?数据字典包含哪些内容呢?数据字典是对数据库中的数据.库对象.表对象等的元信息的集合.在MySQL中,数据字典信息内容就包括表结构…
转自 关于MySQL .0的几个重点,都在这里 https://mp.weixin.qq.com/s/QUpk9uuS2JTli1GT6HuORA 一.关于MySQL Server的改进 1.1 redo log 重构  在MySQL8.0中重新设计了redo log,主要改进fsync,使得效率更高,减少锁,优化flush机制,不会频繁flush.同时,支持更高用户并发请求. http://dimitrik.free.fr/blog/archives/2017/10/mysql-perform…