31

如果你终止一个长时间运行的变更查询会发生什么?更改查询会简单地还原吗?这需要多长时间(作为它已经运行的时间的一部分)?

如果该查询被复制到另一台服务器上怎么办?杀死另一台服务器上的进程会恢复原始服务器的更改查询吗?

我们正在运行 mysql

4

2 回答 2

20

这取决于你在做什么。如果您在表上运行an alter table...add index命令InnoDB(不太确定MyISAM),那么它将运行并运行,因为它首先复制整个该死的表 lock-stock-and-barrel:如果它在“复制到临时表”的中间“那么它几乎是不可阻挡的。

看这里:

在大多数情况下,ALTER TABLE 通过制作原始表的临时副本来工作。对副本进行更改,然后删除原始表并重命名新表。在执行 ALTER TABLE 时,其他会话可以读取原始表。对表的更新和写入会停止,直到新表准备好,然后自动重定向到新表而不会出现任何失败的更新。

于 2010-04-28T19:47:48.823 回答
0

如果该查询被复制到另一台服务器上怎么办?

ALTER 也将在该服务器上执行,并产生相关影响。

杀死另一台服务器上的进程会恢复原始服务器的更改查询吗?

没有。原始服务器没有反向通道来了解从服务器上发生(或未发生)的事情。如果你杀死了从服务器上的 ALTER,那么你最终会遇到主服务器拥有新约束或索引而从服务器没有的情况。这很少是幸福的秘诀:)

一旦 ALTER 进入复制日志,你要么让它到处运行,要么到处杀掉它。

于 2016-01-26T10:14:29.140 回答