2010-04-28 86 views
23

如果你杀死一个长时间运行的alter query会发生什么? alter query会简单地还原吗?这需要多长时间(占已经运行的时间的一部分)?如果您杀死长时间运行的alter query,会发生什么情况?

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

我们在运行mysql

+27

哈哈,对不起,我有一群工程师挤在显示器周围,在这篇文章中凝视着他们满头大汗的眉毛 - 只是在等待答案 - 而后台的mysql服务器开始抽烟。 – 2010-04-28 18:27:46

+0

哈哈,我们几乎不得不让它冒烟直到查询结束。但很高兴知道下次..上帝禁止 – 2010-04-28 18:42:40

+0

那么,我在这里。我是在这样的情况下做了一个副本,所以停下来很好,但涉及出汗。感谢上帝,它不是在生产,但写锁定是臭名昭着的。 – Aki 2014-01-13 14:48:38

回答

12

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

See here:

在大多数情况下,通过 ALTER TABLE作品制作 原始表的临时副本。对副本执行的更改为 ,然后删除 原表,并重命名新的 。在执行ALTER TABLE为 的同时,其他会话可读的原始表格为 。更新 并且写入表的操作将停止 ,直到新表准备就绪,然后 自动重定向到 新表,而没有任何失败的更新。

+2

看起来我们的案例是“没有临时表是必要的” - 但它看起来像我们的表格仍然锁定,我们的开放连接尖刺,我们有5到10分钟的中断。如果我们杀死一个不*创建副本的查询...那么是什么? – 2010-04-29 18:51:21

+0

@BT:怎么没有临时表创建,你的具体情况是什么? – Aki 2014-01-13 14:49:23

+2

顺便说一句,我在复制到临时表期间杀死了进程,它删除了写锁,数据仍然存在并可访问。我不知道临时副本在哪里。 – Aki 2014-01-13 14:58:40

0

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

ALTER将在该服务器上执行,并带有相关影响。

在另一台服务器上查杀进程是否会恢复原始服务器的alter query?

没有。原始服务器没有后备通道来了解从站上发生(或未发生)的情况。如果你杀死从机上的ALTER,那么你将在主机有新的约束或索引,而从机没有的情况下结束。这很少是幸福的秘诀:)

一旦ALTER进入复制日志,您必须让它在任何地方运行,或在任何地方杀死它。

相关问题