mysql online ddl遇到的问题记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kang389110772/article/details/86499741

背景

同事在线上执行两条DDL语句的时候,时间相差很大,第一个的DDL甚至执行了5分钟,引起了一些业务报警。而第二个执行了30秒,没有任何报警。

于是我们开始讨论了DDL的时候是否会锁表,block住DML。

分析

经过一番搜索,得到了一下结论。

MySQL从5.6版本开始执行了online ddl, 然后在大部分修改column情况下是支持并发的。

核心是支持了ALTER时候指定算法,支持INPLACECOPY.

首先判断版本,使用SHOW VARIABLES LIKE "%version%";查看使用的数据库版本,当前是5.7.

其次查看一下online ddl 支持的column 操作:
online ddl支持的column operation

从这张表中可以看到,对于column data type的修改是不支持并发DML,所以会影响5分钟,但是新增一个column是支持并发DML的。

其次如果执行算法为inplace还需要注意table是在哪个版本build的,如果当前版本是5.6以上,但是要操作的表包含日期类型的column并且是在5.6之前的版本build的话,是不支持inplace算法的,需要先rebuild。

资料:

  1. mysql online ddl文档
  2. mysql alter table文档
  3. MySQL zero downtime schema update without algorithm inplace(解决包含日期类型并且表示5.5版本build的问题)
  4. mysql innoDB在线ddl文章

猜你喜欢

转载自blog.csdn.net/kang389110772/article/details/86499741
今日推荐