遇到有支援 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相當好用的工具...
沒有留言:
張貼留言