在线不停机修改大表结构

假设我们需要修改一张生产环境正在使用的表的表结构,比如添加字段,修改字段类型,修改索引等,有两种方法。

假设原表为table1

一. 手动循环插入

  1. 首先创建新表table2,在新表中修改以满足自己的需要。
  2. 循环原表,将数据分批插入新表中
  3. 通过rename操作修改表名,实现两表的替换。(RENAME TABLE table1 TO table_old,table2 TO table1;)

       但是这种方法存在隐患,当步骤2进行到一半,即原表中的数据有一半插入到新表时,如果已经插入的数据在原表被update,那么就会导致两张表数据的不一致,使用时需要特别注意

二.使用第三方工具来实现(PerconaTookit)

        只讲原理

        当我们需要修改一个表的结构时,工具会创建一个新的表,在新的表上修改结构,另外会在原表上设置触发器,原表上所有数据的增删改都会被触发器同步至新表。触发器创建完成后开始进行数据拷贝,在拷贝的同时如果有数据更改会触发触发器同步更改。当所有数据同步完成后会删除原来的表并且将新表rename,从而达到替换的效果。

                

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值