14.13.5 在线 DDL 失败情况

联机 DDL 操作失败通常是由于以下情况之一:

  • ALGORITHM子句指定与特定类型的 DDL 操作或存储引擎不兼容的算法。

  • LOCK子句指定了与特定类型的 DDL 操作不兼容的低锁定度(SHAREDNONE)。

  • 在 awaittable 上的exclusive lock时发生超时,这可能在 DDL 操作的初始阶段和最终阶段短暂需要。

  • tmpdirinnodb_tmpdir文件系统磁盘空间不足,而 MySQL 在创建索引期间将临时排序文件写入磁盘。有关更多信息,请参见第 14.13.3 节“在线 DDL 空间要求”

  • 该操作需要很长时间,并且并行 DML 修改 table 的程度很大,以致于临时联机日志的大小超过了innodb_online_alter_log_max_size配置选项的值。这种情况导致DB_ONLINE_LOG_TOO_BIG错误。

  • 并发 DML 对 table 进行了更改,原始 table 定义允许更改,但新 table 定义不允许。当 MySQL 尝试应用并发 DML 语句中的所有更改时,操作只会在最后失败。例如,您可以在创建唯一索引时将重复的值插入到列中,或者在该列上创建primary key索引时将NULL值插入到列中。并发 DML 所做的更改优先,并且ALTER TABLE操作实际上是rolled back