代码之家  ›  专栏  ›  技术社区  ›  Christian Studer delphist

是否可以安全地终止复制mysql进程,该进程将“复制到tmp表”?

  •  5
  • Christian Studer delphist  · 技术社区  · 16 年前

    我在一个主MySQL(5.0,Linux)服务器上遇到了一个问题:我试图在一个表行中添加一个注释,它转换成一个alter table命令。现在,这个过程停留在“复制到tmp表”上,复制了100000多行。磁盘IO使用率非常高。

    因为master正在使用复制,所以我不确定是否可以终止这个过程。奴隶们还没有看到alter table命令。

    (为了说明这一点:我说的是从mysql进程列表中删除进程,而不是mysql守护进程本身。)

    3 回复  |  直到 16 年前
        1
  •  3
  •   ggiroux    16 年前

    是的,您可以终止它-在提交事务之前,即在完成更改之前,更改不会进入binlogs。所以从系统不会看到也不会执行它,而主系统将回滚到旧的表结构。

    您可以使用 show binlog events mysqlbinlog 实用工具。

        2
  •  0
  •   Pentium10    16 年前

    不,这不安全。只有当您最近对数据库进行了完整备份时,才能在出现问题时进行恢复。 可能有一些锁,然后你会被锁在桌子上,可能会损坏钥匙。

    如果您为如此大的数据库添加新列,这是一个建议。更容易

    • 创建表架构的副本
    • 空的时候在那张桌子上运行alter,
    • 用insert-into从原始数据填充…()从…中选择字段。

    这要快得多。然后明显地将表重命名为original。

        3
  •  0
  •   Willem    16 年前

    你可以终止手术,但有两件事会发生:

    1. 从模式与主模式不一致(因此:)
    2. 从服务器上的复制可能会停止。

    当复制停止时,可以尝试通过跳过“”手动修复从属服务器。 alter table '通过在从属服务器上输入指令:

    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;