如果终止长时间运行的更改查询会发生什么?

问题描述 投票:0回答:3

如果终止长时间运行的更改查询会发生什么?更改查询会简单地恢复吗?这需要多长时间(占已运行时间的比例)?

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

我们正在运行mysql

mysql kill alter
3个回答
25
投票

这取决于你在做什么。如果您在

an alter table...add index
表上运行
InnoDB
命令(不太确定
MyISAM
),那么它只会运行并运行,因为它首先复制整个该死的表锁库和桶:如果是在“复制到临时表”的中间,它几乎是不可阻挡的。

看这里:

在大多数情况下,ALTER TABLE 的工作原理是 制作一份临时副本 原始表。改动是 在副本上执行,然后 原表被删除,新表被删除 一个被重命名。虽然 ALTER TABLE 是 执行后,原表为 可供其他会话读取。更新 并且对表的写入已停止 直到新表准备好,然后 会自动重定向到 新表没有任何失败的更新。


0
投票

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

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

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

不。原始服务器没有反向通道来了解从属服务器上发生(或未发生)的情况。如果您终止从属设备上的 ALTER,那么您将面临这样的情况:主设备具有新的约束或索引,而从设备没有。这很少是幸福的秘诀:)

一旦 ALTER 进入复制日志,您要么必须让它到处运行,要么到处杀死它。


0
投票

首先执行命令:

SHOW FULL PROCESSLIST;

接下来,仔细检查进程列表并查找状态为

copy to temp table.
的任何条目。如果您识别出具有此状态的查询,则表明终止它们的风险较小。在这种情况下,您可以通过执行以下命令安全地终止查询:

KILL QUERY_ID;

将“QUERY_ID”替换为您要终止的查询的实际 ID。您可以在

SHOW FULL PROCESSLIST
命令显示的列表中找到查询的 ID。

© www.soinside.com 2019 - 2024. All rights reserved.