MySQL 9.0 发行说明
在线 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
操作实际上已 回滚。