33
回答
mysql亿级表增加一个字段
华为云4核8G,高性能云服务器,免费试用   

mysql亿级表增加一个字段 ,例如;alter table table1 add id int

每次都执行失败,原表大约有5亿行数据,30G,在执行alter table 时创建的临时表到大约19G的时候就停止了,这是为什么

共有33个答案 最后回答: 6天前

可以试试这种办法:

复制这个表的结构创建新的表xx_temp,然后在新的表增加你要的字段,然后再把数据一批批插入到新表xx_temp,最后旧表改为_bak,新表去掉_temp。

CREATE TABLE 新表
SELECT * FROM 旧表 WHERE 1=2

 

虽然只是一条语句,但必须锁表,然后涉及到几乎整张表的数据的重新存储。毕竟不是列式数据库。正确的做法就是,建立一样的空表,然后把字段加上去,然后回来把数据从旧表中插入新表中,最后删除旧表,把新表名字改成旧表名字。

--- 共有 3 条评论 ---
刘建业你可以写一个程序根据条件一批一批的导入,这样还不会影响现行业务。如果一直导肯定会卡死。 1周前 回复
mingzhongzhuding数据量太大 这样做要插入到什么时候? 2周前 回复
java_loser这个方法似曾相似,膜拜 2周前 回复

老哥,大批量连接,海量数据复制,我不知道你们复制的时候生产的5亿数据有没有卡死,理论上来讲是会卡死的,并不是在19G的问题,而是你的机器及数据库相关配置只能支撑到那个复制量级,我个人建议,你可以考虑修改原来表的文件参数,mysql都有一个表文件,不是表结构,你可以去查下资料,或者搞表复制,这个比较耗时

--- 共有 3 条评论 ---
零度以上 回复 @谁用了布衣 : 呵呵,只能说明你们公司对操作数据库太随便了,随便这么决定用alter这个方案了。。 3周前 回复
NickYoung 回复 @谁用了布衣 : 我觉得可能是死锁或者连接过多导致表卡死,你可以先通过show processlist查看下状态和执行sql,然后再继续深入,不过我觉得不应该把时间浪费在不可行的方案上 3周前 回复
谁用了布衣19G是我看alter table执行时产生的临时表的文件大小,每次都到19G就停止增长了,我就想知道这是为什么,不用考虑效率,正常生产环境下不会做这样的操作 3周前 回复
顶部
  • 山西方山县:以产业扶贫助推百姓脱贫 坚决打赢脱贫攻坚战 2018-12-17
  • 中外院士与生物医药业界、投融资界代表建言广州生命科学产业发展 2018-12-17
  • 为了守护净土 1102位羌塘牧民千里迢迢南迁至拉萨 2018-12-17
  • 2011责任中国十大嘉宾评选 2018-12-17
  • 学生睡觉摔骨折 法院主动出击促调解 2018-12-16
  • 多地明确海洋经济发展路线图 2018-12-16
  • 宝鸡现罕见宣统德寿碑 或为沈钧儒叔父沈卫书丹 2018-12-16
  • 国防部举行盛大招待会 热烈庆祝中国人民解放军建军90周年 中共中央总书记国家主席中央军委主席习近平和李克强张德江俞正声刘云山王岐山张高丽出席 2018-12-16
  • 南宁市区联社:全面助力本地经济发展 2018-12-15
  • 七成网购纠纷来自这两大平台,最易出问题的商品是…… 2018-12-15
  • 回复@老老保老张工:文中写得很清楚啊,看不懂啊?补脑去…… 2018-12-15
  • 六大工程培育发展新动能 2018-12-14
  • 深圳2018年将开行3趟援疆旅游扶贫专列 2018-12-14
  • 盘锦市公安局举行第三次警民对话会工商联专场 2018-12-14
  • 司机未礼让行人被罚是一堂生动的普法课 2018-12-13
  • 179| 634| 385| 195| 563| 400| 1000| 549| 711| 617|