星期五, 6月 22, 2012

用 pt-online-schema-change 改變 InnoDB table

由於 InnoDB 的設計,ALTER TABLE 時有可能會導致其他的表格也卡住 (MyISAM 就可以確定只會卡住當事人當事表格),所以還是用其他方式處理。

遇到有支援 transaction 的資料庫,作法是建立新的表格,然後在舊的表格上面設定 trigger 確保寫入舊的表格也會更新到新表格,接下來把舊的表格複製到新的。

在 Percona Toolkit 內,有 pt-online-schema-change 這個工具幫你做完這些事情。

用法是:
pt-online-schema-change --charset utf8 --alter 'ADD COLUMN xxx INT NOT NULL DEFAULT 0' h=db-test-float-1,u=username,p=password,D=database,t=table
或是多加上 --chunk-index 指定要使用某個 index 當作切割條件 (當 pt-online-schema-change 抓到複合欄位 index 時會產生錯誤,這時候要自己指定單一欄位的 index):
pt-online-schema-change --charset utf8 --chunk-index=index_name --alter 'ADD COLUMN xxx INT NOT NULL DEFAULT 0' h=db-test-float-1,u=username,p=password,D=database,t=table
相當好用的工具...

沒有留言: