mysql面试题: 如何在一个大表里新加表结构?
直接加, 会很慢, 显然不可取,
正确做法是:
A表: 大数据量的表(原始表)
B表: 含有新增表结构的表(新表)
直接创建B表,然后把A表的 存量和增量 都存入B表, 最后删除A表,把B表的表名字改为A表
现在有个工具,可以很好的实现这个功能 :
pt-online-schema-change
https://docs.percona.com/percona-toolkit/pt-online-schema-change.html
工作原理是
创建一个新表,在新表上执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。 注意: 如果表中已经定义了触发器这个工具就不能工作了!!
评论 (0)