MySQL 8.4 发行说明
在线 DDL 操作失败通常是由于以下条件之一造成的
ALGORITHM
子句指定了一种算法,该算法与特定类型的 DDL 操作或存储引擎不兼容。LOCK
子句指定了一个低级别的锁定(SHARED
或NONE
),这与特定类型的 DDL 操作不兼容。在等待对表的排他锁时发生超时,这可能在 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
操作实际上被回滚了。