数据量千万级的表修改表结构的处理方法

       由于业务需求,用到了之前建表的预留字段,但是所需栏位的字段长度较长,需要修改预留字段的长度。在测试库上进行了修改测试,测试库的数量是3千万量级的,操作过程中数据库会进行批量锁死,处理时间大于两个小时(修改的字段是varchar类型,且长度从64扩展到512,耗时主要跟单条记录的数据宽度有关)。

       表的锁死是生产环境锁不能接受的,尤其是这么长的时间。于是建了一张新的表,满足扩展字段,修改字段长度的需求。然后选择在凌晨将凌晨以前的数据导入新表中,我是分成小段插入的新表,语句如下,有四万多条这样的语句,写个小demo提前生产.sql文件

INSERT INTO asset_record_copy (id, uid, uname,) SELECT id, uid, uname, FROM asset_record r WHERE AND r.time > '' LIMIT 19980000, 10000
INSERT INTO asset_record_copy (id, uid, uname,) SELECT id, uid, uname, FROM asset_record r WHERE AND r.time > '' LIMIT 19990000, 10000

     然后把之前的表名进行切换,重启新的服务就实现了改表结构的需求。在切换表名重启服务的过程中,会有两三分钟的停止对外服务。最后把拉下的不到一天的数据补上就好了。

转载于:https://my.oschina.net/u/2599355/blog/874153

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值