目前現有的MySQL DDL 工具:
以上工具雖然工作方式並不完全相同,但都使用 trigger舊表上的異動執行到 新表上。
trigger 簡化了遷移的過程,同時也帶來了一些限制,因此有了 Triggerless designgh-ost

Overview

  • Triggers, overhead:MySQL不會預編譯 trigger,因此當查詢觸發 trigger時,除了寫入新表的開銷,同時也必須付出解釋 trigger的開銷。
  • Triggers, locks:原語句與 trigger 執行的語句會處於同一個事務空間,並造成更多的鎖競爭。
  • Trigger based migration, no pause:基於 trigger 的工具無法真正的暫停,因為一旦暫停將導致數據丟失。因此即使暫停複製原表的資料,繁忙的DB仍舊有可能被 trigger 拖垮。
  • Triggers, multiple migrations:基於以上原因,開發者認為在並行操作下更危險。
  • Trigger based migration, no reliable production test:無法在生產環境下測試。
  • Trigger based migration, bound to server: The trigger space is within a MySQL service. It cannot go beyond that space. We are working towards a multi-server solution. More discussion as we make progress.