联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:15897897836 QQ:2106973531

MySQL Online DDL 详解

Online DDL 是 MySQL 5.6 及更高版本中引入的特性,它允许在不阻塞数据库读写操作的情况下执行表结构变更。

一、Online DDL 概述

Online DDL 特性使得以下操作成为可能:

  • 在表结构变更期间,允许并发DML操作(SELECT, INSERT, UPDATE, DELETE)

  • 减少应用停机时间

  • 提高数据库可用性

二、Online DDL 支持的操作

支持 Online DDL 的操作

操作类型是否支持OnlineDDL说明
添加索引支持不影响DML操作
删除索引支持不影响DML操作
重命名列支持MySQL 5.6+
修改列数据类型部分支持有限制条件
添加列支持MySQL 5.6+
删除列支持MySQL 5.6+
修改列默认值支持不影响DML操作
修改列NULL属性支持需要验证

不支持 Online DDL 的操作

  • 修改主键

  • 修改列顺序

  • 修改表字符集

  • 某些存储引擎特定的操作

三、Online DDL 实现方式

MySQL 提供了两种语法来执行 Online DDL:

sqlsql复制-- 标准语法(MySQL自动判断是否使用Online DDL
ALTER TABLE table_name ADD COLUMN column_name INT;

-- 显式指定Online DDL语法
ALTER TABLE table_name ADD COLUMN column_name INT, ALGORITHM=INPLACE, LOCK=NONE;

四、ALGORITHM 选项

  • ALGORITHM=COPY:传统方式,创建临时表并复制数据

  • ALGORITHM=INPLACE:尝试原地修改,不复制数据

  • ALGORITHM=INSTANT:MySQL 8.0+,立即完成某些操作

五、LOCK 选项

  • LOCK=NONE:允许并发读写

  • LOCK=SHARED:允许读,阻塞写

  • LOCK=EXCLUSIVE:阻塞读写

六、Online DDL 最佳实践

  1. 测试环境验证​:先在测试环境验证DDL操作的影响

  2. 低峰期执行​:即使支持Online DDL,也建议在低峰期执行

  3. 监控性能​:执行期间监控数据库性能

  4. 分批操作​:对大表操作考虑分批进行

  5. 使用工具​:考虑使用pt-online-schema-change等工具

七、Online DDL 限制

  1. 空间需求​:某些操作仍需要额外的临时空间

  2. 性能影响​:虽然不阻塞,但仍可能影响性能

  3. 外键约束​:涉及外键的操作可能有额外限制

  4. 触发器​:表上有触发器时可能有特殊行为

八、示例

添加索引(Online DDL)

sqlsql复制ALTER TABLE users ADD INDEX idx_email (email), ALGORITHM=INPLACE, LOCK=NONE;

添加列(Online DDL)

sqlsql复制ALTER TABLE users ADD COLUMN last_login DATETIME, ALGORITHM=INPLACE, LOCK=NONE;

修改列类型(需要验证是否支持Online DDL)

sqlsql复制ALTER TABLE users MODIFY COLUMN age SMALLINT, ALGORITHM=INPLACE;

九、检查操作是否支持Online DDL

sqlsql复制-- 查看DDL操作是否支持Online模式
SELECT * FROM information_schema.innodb_trx WHERE trx_query LIKE 'ALTER TABLE%';

-- 或使用EXPLAIN查看
ALTER TABLE users ADD COLUMN test INT, ALGORITHM=INPLACE;
/* 查看执行计划 */

十、MySQL 8.0 改进

MySQL 8.0 引入了 Instant DDL,对某些操作(如添加列)可以立即完成:

sqlsql复制ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ALGORITHM=INSTANT;

Online DDL 是MySQL数据库管理的重要特性,合理使用可以显著提高数据库的可用性和维护效率。

相关文章

从安装PostgreSQL开始
通过以下步骤,你可以在 CentOS 7 上成功安装和配置 PostgreSQL 14。首先,设置 RPM 仓库并安装 PostgreSQL 14 服务器。然后,创建自定义数据存储目录并初始化数据库。接下来,修改启动脚本以使用自定义数据存储目录,并设置 PostgreSQL 监听所有 IP 地址。为了增强安全性,配置密码认证并修改 postgres 超级用户密码。最后,确保所有配置生效,重启 PostgreSQL 服务。通过这些步骤,你将拥有一个配置良好且安全的 PostgreSQL 数据库环境。如果在过程中遇到任何问题,请参考官方文档或寻求专业支持。
checkpoint是什么东西?一个位置?还是一个操作?
checkpoint是一个操作,执行这个操作的开始时刻,会记录当前开始时刻的 WAL 位置作为重做点,这个位置会被保存在文件中。 然后将该重做点之前所有 shared buffer 中的脏页均被刷入到存储。checkpoint又名检查点,一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性。
PostgreSQL 内参:深入解析运行原理【快照篇】
来源于灿哥的:《PostgreSQL 内参:深入解析运行原理》,非常好的一本书。
PG存在的级联删除(ON DELETE CASCADE)
在 PostgreSQL 中,如果你有两张表:用户表(users)和订单表(orders),并且用户表的主键是订单表的外键,那么你可以通过以下步骤来进行实验,删除订单表中的一条数据,然后删除用户表中的一条数据。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册