我在主MySQL(5.0,Linux)服务器上遇到问题:我试图在表行中添加注释,转换为ALTER TABLE命令。现在这个过程停留在“复制到tmp表”上,复制了100'000'000 +行。磁盘IO的使用率非常高。
由于master正在使用复制,我不确定是否可以终止此进程。奴隶还没有看到ALTER TABLE命令。
(为了明确这一点:我说的是从MySQL-PROCESSLIST中杀死进程,而不是MySQL-Daemon进程本身。)
答案 0 :(得分:3)
是的,你可以杀死它 - 在事务提交之前,ALTER不会进入binlog,即直到ALTER完成。所以奴隶不会看到也不会执行它,主人将回滚到旧的表结构。
您可以使用show binlog events
或mysqlbinlog
实用程序轻松验证ALTER是否尚未包含在binlog中。
答案 1 :(得分:0)
不,这不安全。仅当您具有数据库的完整备份(最近)时,才能在出现问题时进行恢复。 可能会有一些锁定,然后在桌面锁定后结束,可能会损坏按键。
作为建议,如果为这样一个大型数据库添加新列。这很容易
这要快得多。然后显然将表重命名为原始。
答案 2 :(得分:0)
你可以杀死这个行动,但有两件事可能发生:
当复制停止时,您可以通过在从属服务器上输入跳过“alter table
”指令来尝试手动修复从属设备:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;