mysql亿级表增加一个字段

谁用了布衣 发布于 07/03 15:51
阅读 5K+
收藏 10

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

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

加载中
2
蓝水晶飞机
蓝水晶飞机

可以试试这种办法:

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

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

 

2
lazyluo
lazyluo

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

刘建业
刘建业
你可以写一个程序根据条件一批一批的导入,这样还不会影响现行业务。如果一直导肯定会卡死。
养生程序猿
养生程序猿
数据量太大 这样做要插入到什么时候?
j
java_loser
这个方法似曾相似,膜拜
1
独孤晓林

mysql亿级不分表吗?速度够?

1
NickYoung
NickYoung

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

零度以上
零度以上
回复 @谁用了布衣 : 呵呵,只能说明你们公司对操作数据库太随便了,随便这么决定用alter这个方案了。。
NickYoung
NickYoung
回复 @谁用了布衣 : 我觉得可能是死锁或者连接过多导致表卡死,你可以先通过show processlist查看下状态和执行sql,然后再继续深入,不过我觉得不应该把时间浪费在不可行的方案上
谁用了布衣
19G是我看alter table执行时产生的临时表的文件大小,每次都到19G就停止增长了,我就想知道这是为什么,不用考虑效率,正常生产环境下不会做这样的操作
0
DeMoNHaDeS
DeMoNHaDeS

这么大数据量修改表结构还是不要直接在原表上操作了

haitaosoft
haitaosoft
回复 @谁用了布衣 : 可能是数据库的日志大小限制。。。。或者超时设置
谁用了布衣
我只是想知道为什么会卡在19G左右就停止了,正常是不会在原表上做这样的操作的
0
卫江涛
卫江涛
这么改不死就不正常了
谁用了布衣
理由呢
0
writeademo
writeademo

链接超时了吧

谁用了布衣
已确定,是链接超时
0
开源中国首席弟子
开源中国首席弟子

这么大的表肯定是改不动了。我现在数据最多的表是250万。好奇你的表五亿条数据还在跑

0
永远的Chester
永远的Chester

楼上老兄说的对,应该是链接超时

颖辉小居
颖辉小居
回复 @谁用了布衣 : 是不是修改了超时时间就可以了?
谁用了布衣
是链接超时
0
h
haobani

服务器什么配置啊,跟踪一下cpu 和内存变化

返回顶部
顶部