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周前 回复
顶部
  • 劳动创造价值,看生产队求工分值之实践。事实说劳动创造价值,能否认的了吗? 2019-02-20
  • 红网定位党网 首页改版上线打造“五大平台” 2019-02-20
  • 中国电信安康分公司60家智慧家庭便民服务中心盛大开业中国电信安康-最新活动 2019-02-20
  • 5G标准出炉!与4G有啥不一样? 或1秒内下载1G电影 2019-02-20
  • 甘肃裕河:“美猴王”下山 2019-02-19
  • 比利时并不轻松地击败巴拿马 2019-02-19
  • 【对话马克思·院长名家谈②】郝立新:马克思给我们留下怎样丰富的思想遗产 2019-02-19
  • 洪崖洞、长江索道、李子坝轻轨站……这些网红景点21年前的模样你知道吗? 2019-02-18
  • 正义感爆棚:流浪狗“路见不平” 赶跑打劫男子 2019-02-18
  • 北京三环内“最贵”麦田 变为城市独特风景线 2019-02-18
  • 凝聚合作共赢的价值公约数 2019-02-17
  • 紫光阁中共中央国家机关工作委员会 2019-02-17
  • 以古鉴今,习近平多次提及屈原 2019-02-17
  • 迈向5G新世界:将彻底改变我们的社交与互动方式 2019-02-16
  • [理上网来·辉煌十九大]蔡昉:转向高质量发展“三谈” 2019-02-16
  • 616| 269| 408| 249| 736| 220| 660| 246| 442| 887|