MySQL 8.0 新特性之原子 DDL

MySQL 8.0 新特性之原子 DDL

MySQL 8.0 新增原子 DDL(Atomic DDL)特性,支持针对库和表相关的 DDL 操作,但前提对象必须是 InnoDB 存储引擎,同时也支持部分非表相关的 DDL 语句,如 CREATE|ALTER|DROP USER,GRANT,REVOKE 等。

新增 innodb_print_ddl_logs 参数,用于控制是否将 DDL 操作日志打印到数据库日志中,默认为 OFF

测试用例1:原子 DDL

MySQL 5.7

复制代码
mysql> show tables;
+--------------------+
| Tables_in_sbtest57 |
+--------------------+
| t1                 |
| t2                 |
+--------------------+
3 rows in set (0.00 sec)

## 执行删除表操作,此时命令报错,因为表 t3 并不存在
mysql> drop table t2,t3;
ERROR 1051 (42S02): Unknown table 'sbtest57.t3'

## 上条 DDL 语句虽执行报错,但 t2 仍然被删除
mysql> show tables;
+--------------------+
| Tables_in_sbtest57 |
+--------------------+
| t1                 |
+--------------------+
2 rows in set (0.00 sec)

MySQL 8.0

复制代码
mysql> show tables;
+-------------------+
| Tables_in_sbtest8 |
+-------------------+
| t1                |
| t2                |
+-------------------+
4 rows in set (0.00 sec)

## 执行删除表操作,此时同样报错
mysql> drop table t2,t3;
ERROR 1051 (42S02): Unknown table 'sbtest8.t3'

## 查看表,t2 未被删除,符合原子 DDL 特性
mysql> show tables;
+-------------------+
| Tables_in_sbtest8 |
+-------------------+
| t1                |
| t2                |
+-------------------+
4 rows in set (0.00 sec)

测试用例2:innodb_print_ddl_logs 参数

复制代码
## MySQL 8.0
## log_error_verbosity,用于控制错误日志中事件的详细程度,默认为 2,设置为 3 可打印更为详细的信息
mysql> set global log_error_verbosity=3;
mysql> set global innodb_print_ddl_logs=1;
mysql> drop table t1;
Query OK, 0 rows affected (0.01 sec)

## MySQL 错误日志
2024-03-06T14:09:47.311610+08:00 31 [Note] [MY-012475] [InnoDB] DDL log insert : [DDL record: DROP, id=68, thread_id=31, table_id=1077]
2024-03-06T14:09:47.311829+08:00 31 [Note] [MY-012473] [InnoDB] DDL log insert : [DDL record: DELETE SPACE, id=69, thread_id=31, space_id=15, old_file_path=./sbtest8/t1.ibd]
2024-03-06T14:09:47.316996+08:00 31 [Note] [MY-012485] [InnoDB] DDL log post ddl : begin for thread id : 31
2024-03-06T14:09:47.317073+08:00 31 [Note] [MY-012479] [InnoDB] DDL log replay : [DDL record: DELETE SPACE, id=69, thread_id=31, space_id=15, old_file_path=./sbtest8/t1.ibd]
2024-03-06T14:09:47.318231+08:00 31 [Note] [MY-012479] [InnoDB] DDL log replay : [DDL record: DROP, id=68, thread_id=31, table_id=1077]
2024-03-06T14:09:47.319411+08:00 31 [Note] [MY-012486] [InnoDB] DDL log post ddl : end for thread id : 31

注:更多关于原子 DDL 的信息,请查看 《MySQL 8.0 Reference Manual:15.1.1 Atomic Data Definition Statement Support》。

相关推荐
aax12134539 分钟前
VOC 集群治理工程实操|美丽蓝天绿岛项目 RTO 工艺选型、管控方案与申报要
大数据·数据库·人工智能
IvorySQL40 分钟前
PG 日报|优化缓冲区批量扫描,降低多套接字并发竞争
数据库·人工智能·postgresql·开源·区块链
这个DBA有点耶44 分钟前
交易型数据库是什么?OLTP核心能力与2026选型指南
数据库·数据仓库·sql·database·数据库架构·olap·dba
大熊猫侯佩1 小时前
WWDC26 全新 SwiftData 的 .codable 宏选项:它不是泛型专用胶水
数据库·swift·apple
童谣13 小时前
越华环保集团市级统筹申报数字化中台:政策校验与减排仿真一体化架构
数据库·架构
制造数据与AI践行者老蒋3 小时前
离谱!PromptTemplate 遇上 JSON,花括号直接引发解析战争
数据库·microsoft·json
中微极客3 小时前
用LangChain 0.3构建生产级RAG与Agent:从API集成到Streamlit部署
数据库·人工智能·langchain
吴声子夜歌3 小时前
MongoDB 4.x——并发优化
数据库·mongodb
不如语冰4 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
提笔了无痕5 小时前
MySQL SQL 从 EXPLAIN 到索引优化,搞懂 SQL 为什么慢
android·sql·mysql