在线更改表结构pt-onling-schema-change
2016-03-02 17:50
274 查看
pt-online-schema-change是perona公司的工具,它解决了更改表时不锁表的问题,且不会影响到业务,其原理是:
如果有外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,针对相应的设置进行处理。
创建一个新的表,表结构为修改后的表结构,用于从源数据表向新数据表导数据。
创建触发器,在复制数据开始后,将对源数据表继续进行数据修改的数据记录下来,以便在数据复制结束后执行这些操作,保证数据不丢失。
复制数据,从源数据表中复制数据到新表中。
修改外键相应的子表,根据修改后的数据,修改外键的关联的子表。
更改源数据表为old表,把新表改名为源表名,并将old表删除。
测试结果:支持那种形式的修改。
对没有主键的表增加字段,该工具会报错。
对没有主键的表增加主键,可以创建成功。
从库上有replicate_do_table=book.t1,在master上增加字段,会报错,不会对把主库上产生的临时表复制到从库上。在把临时表改名成原表名时会报错。
对有外键的表,对父表增加字段,可以创建成功。
对有外键的表,对子表增加字段,可以创建成功。
字段含有not null不为空,会报错,需要增加默认值才可以更改成功。
如果有外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,针对相应的设置进行处理。
创建一个新的表,表结构为修改后的表结构,用于从源数据表向新数据表导数据。
创建触发器,在复制数据开始后,将对源数据表继续进行数据修改的数据记录下来,以便在数据复制结束后执行这些操作,保证数据不丢失。
复制数据,从源数据表中复制数据到新表中。
修改外键相应的子表,根据修改后的数据,修改外键的关联的子表。
更改源数据表为old表,把新表改名为源表名,并将old表删除。
测试结果:支持那种形式的修改。
对没有主键的表增加字段,该工具会报错。
对没有主键的表增加主键,可以创建成功。
从库上有replicate_do_table=book.t1,在master上增加字段,会报错,不会对把主库上产生的临时表复制到从库上。在把临时表改名成原表名时会报错。
对有外键的表,对父表增加字段,可以创建成功。
对有外键的表,对子表增加字段,可以创建成功。
字段含有not null不为空,会报错,需要增加默认值才可以更改成功。
相关文章推荐
- 转<<C#集合Dictionary中按值的降序排列
- Lambdas(C++11新增)
- 设计模式理解(九)结构型——外观(Facade)
- 设计模式理解(八)结构型——装饰者模式(记得加上UML图 --- 未完)
- build.xml: 21: Class not found: javac1.8
- 数据批量导入HBase
- Android emulator中C代码的调试——gdb/gdbservers时遇到的坑
- Redis - Command examples
- ndk-stack 的使用
- Android插件化原理解析——Hook机制之动态代理
- OGNL表达式
- mark
- Android内存优化一:内存分析工具 MAT 的使用
- Phabricator 开放源代码的软件开发平台 Window Active Directory ldap ad域配置记录
- swift 里的class和static
- 面试题目以及注意事项
- XNA4.0 RPG游戏开发教程(二)
- android仿微信朋友圈上传下载图片
- 二叉排序数树
- 新闻发布系统