MySQL 5.7: 新增的online DDL操作

简介:

(这是个汇总文章,后续有新的Online DDL操作 会不断更新…)

1. 支持ALTER TABLE t1 RENAME INDEX idx1 to idx2;

(Server层)语法支持的worklog: http://dev.mysql.com/worklog/task/?id=6555
(Innodb层)Online DDL的worklog: http://dev.mysql.com/worklog/task/?id=6752

新增了语法支持RENAME INDEX操作:

mysql> create table t1 (a int, b int, index x1(a));
Query OK, 0 rows affected (0.00 sec)

mysql> alter table t1 rename index x1 to x2;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

主要包含三个过程:
1. Renaming in InnoDB data dictionary (SYS_INDEXES)


2. Renaming in InnoDB data dictionary cache (the dict_table_t/dict_index_t
objects)
3. Renaming in InnoDB persistent stats storage

ref patch: http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/5116

WL#6752WL#6555

2. 支持在线增加VARCHAR列的长度 (反之,如果缩小列长度,则只支持copy ALGORITHM)
worklog: http://dev.mysql.com/worklog/task/?id=6554
目前只支持在255字节内的长度使用IN-PLACE算法,原因是超过255字节,innodb层存储数据表示列长度的部分就得多扩展一个字节。
不支持IN-PLACE 减小字段长度:
在满足上述情况下,直接更新Innodb 系统表SYS_COLUMNS即可。

mysql> create table t1 (a varchar(100));
Query OK, 0 rows affected (0.00 sec)

mysql> alter table t1 ALGORITHM=INPLACE, CHANGE COLUMN a a varchar(5);
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

mysql> alter table t1 ALGORITHM=INPLACE, CHANGE COLUMN a a varchar(200);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table t1 ALGORITHM=INPLACE, CHANGE COLUMN a a varchar(256);
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

ref patch:http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/5107.1.230

WL#6554


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
499 11
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
467 4
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
446 0
|
SQL 监控 关系型数据库
MySQL如何优雅的执行DDL
在MySQL中优雅地执行DDL操作需要综合考虑性能、锁定和数据一致性等因素。通过使用在线DDL工具、分批次执行、备份和监控等最佳实践,可以在保障系统稳定性的同时,顺利完成DDL操作。本文提供的实践和案例分析为安全高效地执行DDL操作提供了详细指导。
728 14
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
1248 4
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
420 6
|
SQL 算法 关系型数据库
Mysql Online DDL
Mysql Online DDL
259 2
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

推荐镜像

更多