Online DDL MySQL&MariaDB

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 本文主要对Mariadb和MySQL对Online DDL的支持情况做一个对比,方便读者随时参考。MariaDB 10.8引入了Lag Free Alter这个新特性,该特性主要是为了降低DDL引起的复制延迟,本文也给出了MariaDB 对不同DDL,lag free alter的支持情况。Mariadb Online DDL当用户通过ALGORITHM 参数为DDL指定执行算法时,如果用户指定算

本文主要对Mariadb和MySQL对Online DDL的支持情况做一个对比,方便读者随时参考。MariaDB 10.8引入了Lag Free Alter这个新特性,该特性主要是为了降低DDL引起的复制延迟,本文也给出了MariaDB 对不同DDL,lag free alter的支持情况。

Mariadb Online DDL

当用户通过ALGORITHM 参数为DDL指定执行算法时,如果用户指定算法为COPY,那么则使用COPY算法,如果用户指定其他算法,则MariaDB认为用户指定的算法是用户期待的最低有效性算法,MariaDB会选择支持该DDL操作的最有效算法来执行,如果MariaDB无法满足用户的有效性需求,则报错;如果用户选择DEFAULT,则MariaDB会选择支持该DDL操作的最有效算法来执行。

NO COPY和INSTANCE是在MariaDB10.3.7中引入的。

四种算法有效性从低到高:

  • COPY:一定重建表,其操作大致分为四步,创建临时表,从原表向临时表拷贝数据,废弃原表,rename临时表;临时表和原表保存在同一个目录下,命名方式为sql${PID}_${THREAD_ID}_${TMP_TABLE_COUNT}。
  • INPLACE:有的操作需要重建表,一些操作不需要,取决于存储引擎;INPLACE大致操作为,创建临时文件;拷贝原表,过程中发生的DML操作写row log;数据拷贝完成后应用row log到临时文件;删除原表;用临时文件代替原表。
  • NOCOPY:对于需要重建聚簇索引的DDL,则需要重建表,NOCOPY不支持所有需要重建聚簇索引的操作,MariaDB 10.3.7开始支持。
  • INSTANT:INSTANT不支持所有需要更改数据文件的操作,除了更新元数据,MariaDB 10.3.7开始支持。具体细节可以参考文章 http://mysql.taobao.org/monthly/2020/03/01/

对比

下表给出的是Mariadb最新版和MySQL8.0最新版本的比较,MySQL不支持NO COPY操作,因此NO COPY不参与比较,但是下表列出了MariaDB的支持情况。Lag Free为mariadb引入的新特性,主要目的是为了降低DDL引起的复制延迟问题,具体可以参考Lag Free Alter On Slave

操作

INSTANT

NO COPY

INPLACE

重建表

并发 DML

仅修改元数据

和MySQL是否一致 

是否支持lag free

列操作

添加列

MariaDB 10.4及以后

yes

MariaDB 10.4及以后

yes

yes

inplace需要重建表

添加自增列不允许

yes

一致

yes

删除列

MariaDB 10.4及以后

yes

MariaDB 10.4及以后

yes

yes

inplace需要重建表

yes

yes

一致

yes

调整列顺序

MariaDB 10.4及以后

yes

MariaDB 10.4及以后

yes

yes

inplace需要重建表

yes

yes

不一致,MariaDB 10.4及以后支持INSTANT和NO COPY

yes

修改列数据类型

no

no

no

yes

no

yes

一致

yes

扩展 VARCHAR 长度

MariaDB 10.4.3及以后yes

MariaDB 10.4.3及以后yes

MariaDB 10.4.3及以后yes

no

yes

yes

不一致,MariaDB支持ROW_FORMAT为特定取值下算法为INSTANT和NO COPY

yes

修改列为空

MariaDB 10.4.3及以后yes

MariaDB 10.4.3及以后yes

yes

inplace需要重建表

yes

不一致,MariaDB支持ROW_FORMAT取值为REDUNDANT下算法为INSTANT和NO COPY

yes

修改列为非空

no

 no

yes

yes

yes

no

一致

yes

添加新ENUM选项

yes

yes

yes

no

yes

yes

一致

yes

添加新的SET选项

yes

yes

yes

no

yes

yes

一致

yes

修改列默认值

yes

yes

yes

no

yes

yes

一致

yes

删除列默认值

yes

yes

yes

no

yes

yes

一致

yes

重命名列

yes

yes

yes

no

yes

yes

一致

yes

索引操作

添加主键

no

no

yes

yes

yes

no

一致

yes

删除主键

no

no

no

yes

no

no

一致

yes

重建主键

no

no

yes

yes

yes

no

一致

yes

二级索引

创建二级索引

no

yes

yes

no

yes

no

一致

yes

创建全文索引

no

yes

yes

一些情况下不需要重建表

允许只读DML并发执行

no

一致

yes

创建空间索引

no

yes

yes

no

允许只读DML并发执行

no

一致

yes

删除二级索引

no

yes

yes

no

yes

yes

一致

yes

添加外键

no

yes

yes

no

yes

yes

一致

yes

删除外键

yes

yes

yes

no

yes

yes

不一致,MySQL不支持INSTANT

yes

表操作

修改自增值

yes

yes

yes

no

yes

yes

不一致,MySQL不支持INSTANT,且不只修改元数据

yes

修改ROW_FORMAT

no

no

yes

yes

yes

no

一致

yes

修改KEY_BLOCK_SIZE

no

no

yes

yes

yes

no

一致

yes

使用force选项重建表

no

no

yes

yes

yes

no

不一致,MySQL不支持有全文索引的表使用INPLACE重建

yes

重建表

no

no

yes

yes

yes

no

不一致,MySQL不支持有全文索引的表使用INPLACE重建

yes

optimize表

no

no

yes

yes

yes

no

不一致,MySQL不支持有全文索引的表使用INPLACE重建

no

重命名表

yes

yes

yes

no

no

yes

一致

no

从上表可以看出,MariaDB和MySQL对于Online DDL的支持情况大体相同。MariaDB对重建表的相关操作在全文索引方面做了更多的工作,在row_format设置为特定值的情况下,也支持用INSTANT方式扩展VARCHAR操作和修改列值为空操作。同时MariaDB引入了lag free alter,是解决DDL引入的复制延迟的一次有益探索。

参考文档

https://mariadb.com/kb/en/innodb-online-ddl-overview/

https://mariadb.com/kb/en/innodb-online-ddl-operations-with-the-inplace-alter-algorithm/

https://mariadb.com/kb/en/innodb-online-ddl-operations-with-the-nocopy-alter-algorithm/

https://mariadb.com/kb/en/innodb-online-ddl-operations-with-the-instant-alter-algorithm/

https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html

https://z.itpub.net/article/detail/CA30E7600D9E096E3601E6D68469E5AD

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
244 11
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
5月前
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
10月前
|
SQL 监控 关系型数据库
MySQL如何优雅的执行DDL
在MySQL中优雅地执行DDL操作需要综合考虑性能、锁定和数据一致性等因素。通过使用在线DDL工具、分批次执行、备份和监控等最佳实践,可以在保障系统稳定性的同时,顺利完成DDL操作。本文提供的实践和案例分析为安全高效地执行DDL操作提供了详细指导。
492 14
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
859 4
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
450 8
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
1128 0

推荐镜像

更多