2017-08-01 45 views
0

我有一個非常大的表,讓我們把它叫做例子,我嘗試在該表上執行一個小alter命令:阿爾特大表無需停機

ALTER TABLE `example` ADD `example_column` TINYINT(1) NOT NULL DEFAULT 0; 

檢查alter命令的進展:

mysql -e 'show engine innodb status \G' | grep 'undo \| log \| entries' 

給我很好的信息,關於時間 - 或多或少會需要17天才能完成......

阿爾特塊表,所以阻斷生產表17天是不是一個好的選擇。 ;)

我嘗試以調查在網絡上一些偉大的工具,如:

  1. 鉑在線模式變化 - Percona的
  2. GH-OST - GitHub的網絡架構遷移的MySQL

我也看到了有關文件,以及上述工具中,限制部分:

gh-ost limitations

  • 完全不
  • 支持觸發器在所有

pt-online-schema-change limitations

  • 使用觸發器意味着,如果任何觸發器已經該工具將無法工作不支持外鍵在桌子上定義。
  • 不提供改變包含外鍵

我的示例表具有觸發器和外鍵的表什麼好辦法......

你能不能給我一些建議,如何應對這種改變?

我有MySQL 5.6。我使用GTID(基於行)複製。

我將非常感謝您的建議!

+0

這張桌子有多大? –

+0

我想這將是更好地使用一個完全新的表爲你的新列,這將是當前表的擴展表。 –

回答

0

1.創建新表格

2.將現有表格行復制到此新表格中。

3.刪除舊錶

4.Rename新的表名。

5.將舊錶中的行復制到新表中時,確實會在新表和舊錶中插入傳入寫入請求,以便在新表中包含完整行。