2010-01-27 22 views
5

我在主MySQL(5.0,Linux)服務器上遇到了問題:我試圖向錶行添加註釋,這轉換爲ALTER TABLE命令。現在這個過程停留在'copy to tmp table',複製100'000'000 +行。磁盤IO使用情況令人不安。是否可以殺死正在複製到tmp表的複製MySQL進程?

由於主人正在使用複製,我不確定是否可以終止此過程。從屬還沒有看到ALTER TABLE命令。

(要明確這一點:我說的是從MySQL-PROCESSLIST查殺過程中,不是MySQL守護進程本身)。

回答

1

是的,你可以殺死它 - 在事務提交之前,ALTER不會將它寫入binlog,即直到ALTER完成。所以奴隸不會看到也不會執行它,主人將回滾到舊的表結構。

通過使用show binlog eventsmysqlbinlog實用程序,可以輕鬆驗證ALTER是否尚未存在於binlog中。

0

不,這不是安全的。只有當您有數據庫的完整備份(最近)時,才能在出現問題時進行恢復。 有可能會有一些鎖,然後你最終鎖定表鎖,可能會損壞鍵。

如果您爲這樣一個大型數據庫添加新列,建議如下。它更容易

  • 創建表架構
  • 的山寨運行在該表中的改變,而它是空的,從原來的
  • 填充一個INSERT INTO從...()選擇字段.. ..

這要快得多。然後將表格重命名爲原始。

+0

我在談論內部進程,而不是mysqld進程本身。 – 2010-02-01 12:21:24

0

你可以殺了手術,但有兩種情況:

  1. 從模式與主不一致(因此:)
  2. 對奴隸複製可能停止。

當複製停止,您可以嘗試通過輸入從服務器上通過跳過了 'alter table' 指令手動修復從(S):

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

相關問題