是否可以安全地杀死复制MySQL进程,即“复制到tmp表”?

时间:2010-01-27 13:46:58

标签: mysql process replication

我在主MySQL(5.0,Linux)服务器上遇到问题:我试图在表行中添加注释,转换为ALTER TABLE命令。现在这个过程停留在“复制到tmp表”上,复制了100'000'000 +行。磁盘IO的使用率非常高。

由于master正在使用复制,我不确定是否可以终止此进程。奴隶还没有看到ALTER TABLE命令。

(为了明确这一点:我说的是从MySQL-PROCESSLIST中杀死进程,而不是MySQL-Daemon进程本身。)

3 个答案:

答案 0 :(得分:3)

是的,你可以杀死它 - 在事务提交之前,ALTER不会进入binlog,即直到ALTER完成。所以奴隶不会看到也不会执行它,主人将回滚到旧的表结构。

您可以使用show binlog eventsmysqlbinlog实用程序轻松验证ALTER是否尚未包含在binlog中。

答案 1 :(得分:0)

不,这不安全。仅当您具有数据库的完整备份(最近)时,才能在出现问题时进行恢复。 可能会有一些锁定,然后在桌面锁定后结束,可能会损坏按键。

作为建议,如果为这样一个大型数据库添加新列。这很容易

  • 创建表架构的副本
  • 在该表为空时运行该表,
  • 从原始文件填充插入...()从....中选择字段

这要快得多。然后显然将表重命名为原始。

答案 2 :(得分:0)

你可以杀死这个行动,但有两件事可能发生:

  1. slave模式与master(因此:)
  2. 不一致
  3. 奴隶上的复制可能会停止。
  4. 当复制停止时,您可以通过在从属服务器上输入跳过“alter table”指令来尝试手动修复从属设备:

      

    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;