如果您终止长时间运行的alter查询会发生什么?ALTER查询是否会简单恢复?这可能需要多长时间(与查询已运行的时间成比例)?
如果该查询正在被复制到另一台服务器上怎么办? 在其他服务器上终止该进程是否会导致原始服务器的alter查询还原?
我们正在运行mysql
如果您终止长时间运行的alter查询会发生什么?ALTER查询是否会简单恢复?这可能需要多长时间(与查询已运行的时间成比例)?
如果该查询正在被复制到另一台服务器上怎么办? 在其他服务器上终止该进程是否会导致原始服务器的alter查询还原?
我们正在运行mysql
这取决于你在做什么。如果你在一个InnoDB
表上运行alter table...add index
命令(对于MyISAM
我不太确定),那么它将会复制整个表作为临时表,然后进行操作,这样就会一直运行:如果正在执行“复制到临时表”的过程,则几乎无法停止。
大多数情况下,ALTER TABLE 是通过制作原始表的临时副本来进行操作的。 在副本上执行更改,然后删除原始表并将其 重命名为新表。在ALTER TABLE执行时, 原始表可被其他会话读取。对表的更新和写入 被暂停,直到新表准备好,然后自动将其重定向到 新表,没有任何失败的更新。
SHOW FULL PROCESSLIST;
copying to temp table
的条目。如果您发现具有此状态的查询,这意味着它们终止的风险较低。在这种情况下,您可以通过执行以下命令安全地终止该查询:KILL QUERY_ID;
SHOW FULL PROCESSLIST
命令显示的列表中找到查询的ID。