如果你杀死一个长时间运行的alter query会发生什么? alter query会简单地还原吗?这需要多长时间(占已经运行的时间的一部分)?如果您杀死长时间运行的alter query,会发生什么情况?
如果该查询被复制到另一台服务器上该怎么办?将杀死另一台服务器上的进程会恢复原始服务器的alter query?
我们在运行mysql
如果你杀死一个长时间运行的alter query会发生什么? alter query会简单地还原吗?这需要多长时间(占已经运行的时间的一部分)?如果您杀死长时间运行的alter query,会发生什么情况?
如果该查询被复制到另一台服务器上该怎么办?将杀死另一台服务器上的进程会恢复原始服务器的alter query?
我们在运行mysql
这取决于你在做什么。如果您在InnoDB
表(不太确定MyISAM
)上运行an alter table...add index
命令,那么它只会运行并运行,因为它首先复制整个锁定表lock-and-barrel:如果它位于“copy到临时表“,那么它几乎是不可阻挡的。
在大多数情况下,通过 ALTER TABLE作品制作 原始表的临时副本。对副本执行的更改为 ,然后删除 原表,并重命名新的 。在执行ALTER TABLE为 的同时,其他会话可读的原始表格为 。更新 并且写入表的操作将停止 ,直到新表准备就绪,然后 自动重定向到 新表,而没有任何失败的更新。
如果该查询被复制到另一台服务器上怎么办?
ALTER将在该服务器上执行,并带有相关影响。
在另一台服务器上查杀进程是否会恢复原始服务器的alter query?
没有。原始服务器没有后备通道来了解从站上发生(或未发生)的情况。如果你杀死从机上的ALTER,那么你将在主机有新的约束或索引,而从机没有的情况下结束。这很少是幸福的秘诀:)
一旦ALTER进入复制日志,您必须让它在任何地方运行,或在任何地方杀死它。
哈哈,对不起,我有一群工程师挤在显示器周围,在这篇文章中凝视着他们满头大汗的眉毛 - 只是在等待答案 - 而后台的mysql服务器开始抽烟。 – 2010-04-28 18:27:46
哈哈,我们几乎不得不让它冒烟直到查询结束。但很高兴知道下次..上帝禁止 – 2010-04-28 18:42:40
那么,我在这里。我是在这样的情况下做了一个副本,所以停下来很好,但涉及出汗。感谢上帝,它不是在生产,但写锁定是臭名昭着的。 – Aki 2014-01-13 14:48:38