MySQL5.7 加强了在线DDL(varchar字符集)

在MySQL5.6引入了在线DDL,添加字段和辅助索引不锁表,但修改字段属性是锁表的。请见:http://hcymysql.blog.51cto.com/5223301/1370546

如今在MySQL5.7,加强了修改varchar字段属性不锁表,例:

100万行的表,现在要把pad varchar(65)修改为pad varchar(80),可以看到,不用拷贝数据不锁表。

(注:ALGORITHM指定了创建或删除索引的算法,COPY表示按照MySQL 5.1版本之前的方法,即创建临时表。INPLACE表示创建索引或删除索引操作不需要创建临时表。DEFAULT表示根据参数old_alter_table来判断是通过INPLACE还是COPY的算法,改参数默认为OFF,表示采用INPLACE的方式。)

但如果是大于并等于varchar(256)或者把varchar(80)减少到varchar(40),仍旧是需要拷贝数据且锁表,见下图:

参考:

BTW:

MySQL5.7还支持更改索引名,不过实用性不高,谁没事闲得改索引的名字?例:

时间: 2024-10-10 03:37:23

MySQL5.7 加强了在线DDL(varchar字符集)的相关文章

mysql在线ddl操作

mysql5.6开始支持在线ddl,在线ddl能够提供下面的好处: 1提高生产环境的可用性2在ddl执行期间,获得性能和并发性的平衡,可以指定LOCK从句与algorithm从句,lock=exclusize会阻塞整个表的访问,lock=shared会允许查询但不允许dml,lock=none允许查询和dml操作,lock=default或是没有指定,mysql使用最低级别的锁,algorithm指定是拷贝表还是不拷贝表直接内部操作,3只对需要的地方做改变,不是创建一个新的临时表. 之前ddl操

MySQL5.7—在线DDL总结

---切记:DDL操作要在业务低峰期进行 1.MySQL各版本,对于DDL的处理方式是不同的,主要有三种: ①:Copy Table方式: 这是InnoDB最早支持的方式.顾名思义,通过临时表拷贝的方式实现的.新建一个带有新结构的临时表,将原表数据全部拷贝到临                    时表,然后Rename,完成创建操作.这个方式过程中,原表是可读的,不可写.但是会消耗一倍的存储空间. ②:Inplace方式:这是原生MySQL 5.5,以及innodb_plugin中提供的方式.

MySQL5.6在线DDL不锁表(在线添加字段)

MySQL5.6在线DDL不锁表(在线添加字段) 解答你也看一下MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作? 操作如下:1.注意磁盘空间(临时表目录)2.当前内存剩余量3.当前有没有大的事务在执行4.innodb_online_alter_log_max_size参数5.然后在从上添加,再在主上添加(不记录binlog),处理完成后再开启 如果直接先在主上操作,那么会导致主从延迟很大(在量比较大的情况下).因为

MySQL5.6、5.7、8.0在线DDL对比情况

MySQL5.6的版本之后支持了在线DDL,这对于DBA来说是个福音,但是MySQL5.6.5.7和当前的最新版本8.0在各种DDL中的情况不太一样,根据MySQL官方网站的说明整理一份在线DDL的对比情况,具体如下: 原文地址:http://blog.51cto.com/wangwei007/2155574

mysql在线DDL(与oracle的区别)

对mysql有所研究的都知道,当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会显示这个DDL遇到了MDL锁等待,即"waiting for table metadata lock",此时如果你去喝咖啡去了...杯具就发生了,因为此时这个业务表连select都会被阻塞. mysql在5.6官方文档里面说自己可以支持大部分在线DDL了,包括常见的加字段.加索引.改字段等等.但是要注意:这里所谓的支持在线D

MySQL在线DDL gh-ost 使用说明

原文:gh-ost: GitHub's online schema migration tool for MySQL http://github.com/github/gh-ost MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change. Facebook的 OSC 和 LHM 等,但这些都是基于触发器(Trigger)的,今天咱们介绍的 gh-ost 号称是不需要触发器(Triggerless)支持的在线更改表结构的工具. 本文先介绍一下当前

[资料收集]MySQL在线DDL工具pt-online-schema-change

MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网

使用 pt-online-schema-change 实现在线DDL

问题背景 平时进行修改表的结构,更改字段,新增字段,更改字段名称一般都是通过ALTER TABLE  语法进行修改的.对于小表或者并发访问不是很大的情况是OK.但是如果是在线大表,那就很麻烦.由于表数据量大,复制表需要比较长的时间,在这个时间段里面,表是被加了锁的(写锁),加写锁时其他用户只能select表不能update.insert表.表数据量越大,耗时越长. mysql在线ddl(加字段.加索引等修改表结构之类的操作)过程如下: 对表加锁(表此时只读) 复制原表物理结构 修改表的物理结构

MySQL5.7新特性——在线收缩undo表空间

1. MySQL 5.5时代的undo log 在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会越来越大,这会造成2个比较明显的问题: (1)磁盘剩余空间越来越小,到后期往往要加磁盘: (2)物理备份时间越来越长,备份文件也越来越大. 这是怎么回事呢? 原因除了数据量自然增长之外,在MySQL5.5以及之前,InnoDB的undo log也是存放在ibdata1里面的.一旦出现大事务,这个大事务所使用的undo