mysql大數據表添加字段


方案一、老表數據遷移四部曲方案
1、新建老表t_order_goods的備份表t_order_goods_bak,同時加一個字段:isVirtual 並給默認值
2、遷移老表t_order_goods數據到備份表t_order_goods_bak中
3、刪除老表t_order_goods
4、新命名備份表t_order_goods_bak表名為t_order_goods
以上的操作步驟2~4建議是在脫機的情況下執行,避免在執行遷移數據過程中有新數據進來,導致新表數據流失不完整

方案二、升級MySQL的服務器版本
1、將現有MySQL版本5.7升級到8.0.12之后的版本
2、然后再執行添加字段操作

方案一:
優勢:不用再調整業務層的應用程序代碼,只需要DBA遷移表即可
劣勢:新表可能會跟老表數據不一致,數據不完整;脫機操作過長可能會影響其他業務的正常運行
方案二:
優勢:不影響業務層的應用程序代碼,也不會導致數據丟失
劣勢:升級過程,必然要脫機,此過程時間過程一樣會影響業務的正常運行

經驗總結
個人建議在實際情況允許的情況下,如果大家所在的公司也出現類似的問題時,盡可能的還是采用方案三:升級服務器版本
畢竟長遠考慮,后續在業務的發展不確定情況下,原始表拓展加新的字段是很正常的一件事,升級到高版本后 因為引入了新的算法:即時算法 所以會毫秒級別的加字段 不會對業務發布上線造成影響

 

方案一案例:

為了避免這種問題,記錄一下比較妥帖的辦法

1.創建一個臨時的新表,復制舊表的結構

create table `tmp` like `goods`;

2.給新表加上新增的字段

ALTER TABLE `tmp`
    ADD COLUMN `num`  int(10) NOT NULL DEFAULT 0 AFTER `unit`;

3.把舊表的數據復制過來

insert into tmp(id,name,unit) select id,name,unit from goods;

4.重命名

rename table goods to goods_bak;
rename table tmp to goods;

一般情況下,一百多萬的數據量,也可以直接進行加字段操作

但是得看服務器的運行情況,如果有大量服務占用內存,添加字段可能會出現問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM