MySQL 8.3 Release Notes
在线 DDL 操作失败通常是由于以下条件之一:
-
一个
ALGORITHM
子句指定了一个与特定类型的 DDL 操作或存储引擎不兼容的算法。 -
一个
LOCK
子句指定了一个与特定类型的 DDL 操作不兼容的锁定程度(SHARED
或NONE
)。 -
在等待表的 排他锁 时超时,可能需要在 DDL 操作的初始和最终阶段。
-
在创建索引时,
tmpdir
或innodb_tmpdir
文件系统磁盘空间不足,导致 MySQL 在磁盘上写入临时排序文件。有关更多信息,请参阅 第 17.12.3 节,“在线 DDL 空间要求”。 -
操作需要很长时间,并且并发 DML 修改表格,使得临时在线日志的大小超过了
innodb_online_alter_log_max_size
配置选项的值。这将导致DB_ONLINE_LOG_TOO_BIG
错误。 -
并发 DML 对表格进行了更改,这些更改符合原始表定义,但不符合新定义。在操作的最后阶段,当 MySQL 尝试应用所有来自并发 DML 语句的更改时,操作将失败。例如,您可能在创建唯一索引时插入重复值,或者在创建主键索引时插入 NULL 值。并发 DML 所做的更改优先级最高,
ALTER TABLE
操作将被有效地 回退。