在线不停机修改大表结构

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

假设原表为table1

一. 手动循环插入

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

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

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

        只讲原理

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

                

   

上一篇:shardbatis2.x使用手册


下一篇:几个可以整蛊你朋友的 Python 程序