我在主MySQL(5.0,Linux)服務器上遇到了問題:我試圖向錶行添加註釋,這轉換爲ALTER TABLE命令。現在這個過程停留在'copy to tmp table',複製100'000'000 +行。磁盤IO使用情況令人不安。是否可以殺死正在複製到tmp表的複製MySQL進程?
由於主人正在使用複製,我不確定是否可以終止此過程。從屬還沒有看到ALTER TABLE命令。
(要明確這一點:我說的是從MySQL-PROCESSLIST查殺過程中,不是MySQL守護進程本身)。
我在主MySQL(5.0,Linux)服務器上遇到了問題:我試圖向錶行添加註釋,這轉換爲ALTER TABLE命令。現在這個過程停留在'copy to tmp table',複製100'000'000 +行。磁盤IO使用情況令人不安。是否可以殺死正在複製到tmp表的複製MySQL進程?
由於主人正在使用複製,我不確定是否可以終止此過程。從屬還沒有看到ALTER TABLE命令。
(要明確這一點:我說的是從MySQL-PROCESSLIST查殺過程中,不是MySQL守護進程本身)。
是的,你可以殺死它 - 在事務提交之前,ALTER不會將它寫入binlog,即直到ALTER完成。所以奴隸不會看到也不會執行它,主人將回滾到舊的表結構。
通過使用show binlog events
或mysqlbinlog
實用程序,可以輕鬆驗證ALTER是否尚未存在於binlog中。
不,這不是安全的。只有當您有數據庫的完整備份(最近)時,才能在出現問題時進行恢復。 有可能會有一些鎖,然後你最終鎖定表鎖,可能會損壞鍵。
如果您爲這樣一個大型數據庫添加新列,建議如下。它更容易
這要快得多。然後將表格重命名爲原始。
你可以殺了手術,但有兩種情況:
當複製停止,您可以嘗試通過輸入從服務器上通過跳過了 'alter table
' 指令手動修復從(S):
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;
我在談論內部進程,而不是mysqld進程本身。 – 2010-02-01 12:21:24