MySQL線上新增欄位的幾種方案介紹

chenfeng發表於2018-04-17
方案1:業務低峰期進行alter table操作:
例如,凌晨1點或2點進行:
mysql>ALTER TABLE `test` ADD `new_column` int not null default 0 comment '文字長度';


方案2:建立臨時表、加欄位、插入舊資料,增量資料插入和重新命名錶名

1). 建立臨時表
mysql>create table test_tmp like test;

2). 在臨時表上新增欄位
mysql>ALTER TABLE `test_tmp` ADD `new_column` int not null default 0 comment '文字長度';


3). 向臨時表裡插入舊資料
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test);

4). 增量資料插入:
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test WHERE `id` > (SELECT MAX(`id`) from `test_tmp`));


5). 重新命名錶名:
mysql>rename table test TO test_2018;
mysql>rename table test_tmp TO test;


方案3:用第三方開源工具實現,具體實現步驟看連結:
oak-online-alter-table:
%E5%B7%A5%E5%85%B7/

pt-osc:


gh-ost:
http://www.cnblogs.com/jiangwenju/p/5846743.html

facebook osc(Online Schema Change for MySQL):
https://github.com/facebookincubator/OnlineSchemaChange


方案4:在從庫進行新增欄位操作,然後進行mysql主從切換
注意事項:主從複製日誌格式如果為row格式,新增的新列必須是在表的最後。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2153012/,如需轉載,請註明出處,否則將追究法律責任。

相關文章