pt-online-schema-change使用

公司一个业务的DB表结构由于需求不断变更,表结构随着需求的变更不断须要修改,更改字段类型,增长字段。
最苦逼的是其中两个主表都特别大,一个5000W以上,另一个更恐怖达到1亿多。之前都是采用分区,后面
考虑到分区字段没有实际意义,致使分区的优点没有体现出来,只是起了个内心做用而已,也不知道当时这个设计
是从哪里出发的,今年将分区所有去掉了。
切入主题:
这两个大表要加字段,又不能停机,业务发布时间紧迫。当时的构想是用standby来先操做,而后和master作切换。
而后再更改master。再切回master.这样来回折腾。可是这种方式是比较快的,同时咱们也采用pt-online-schema-change来作
在线更改表结构。可是这样操做速度不够快,比直接更改慢了不少,直接更改5个小时。pt-online-schema-change须要15个小时。
固然时间增长了,可是对业务没有影响,仍是值得推荐的,当么有standby的话,使用pt-online-schema-change仍是不错的。
咱们在作小表结构更改,就用的pt-online-schema-change。
简单说下用法:本身使用是在公司业务上,涉及到具体表,不方便透露:
下面来源网络:

 功能介绍: 数据库

  功能为在alter操做更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操做,注意执行这个工具的时候必须作好备份,操做以前最好详细读一下官方文档。 网络

  工做原理是建立一个和你要执行alter操做的表同样的空表结构,执行表结构修改,而后从原表中copy原始数据到表结构修改后的表,当数据copy完成之后就会将原表移走,用新表代替原表,默认动做是将原表drop掉。在copy数据的过程当中,任何在原表的更新操做都会更新到新表,由于这个工具在会在原表上建立触发器,触发器会将在原表上更新的内容更新到新表。若是表中已经定义了触发器这个工具就不能工做了。 app

  用法介绍: dom

  pt-online-schema-change [OPTIONS] DSN 工具

  options能够自行查看help,DNS为你要操做的数据库和表。 spa

  这里有两个参数须要介绍一下: 设计

  --dry-run  这个参数不创建触发器,不拷贝数据,也不会替换原表。只是建立和更改新表。 日志

  --execute  这个参数的做用和前面工做原理的介绍的同样,会创建触发器,来保证最新变动的数据会影响至新表。注意:若是不加这个参数,这个工具会在执行一些检查后退出。这一举措是为了让使用这充分了解了这个工具的原理,同时阅读了官方文档。 文档

  使用示例: it

  在线更改表的的引擎,这个尤为在整理innodb表的时候很是有用,示例以下:

  pt-online-schema-change --user=root --password=XXxx --host=localhost --lock-wait-time=120 --alter="ENGINE=InnoDB" D=test,t=oss_pvinfo2 --execute

  从下面的日志中能够看出它的执行过程:

  Altering `test`.`oss_pvinfo2`...

  Creating new table...

  Created new table test._oss_pvinfo2_new OK.

  Altering new table...

  Altered `test`.`_oss_pvinfo2_new` OK.

  Creating triggers...

  Created triggers OK.

  Copying approximately 995696 rows...

  Copied rows OK.

  Swapping tables...

  Swapped original and new tables OK.

  Dropping old table...

  Dropped old table `test`.`_oss_pvinfo2_old` OK.

  Dropping triggers...

  Dropped triggers OK.

  Successfully altered `test`.`oss_pvinfo2`.

  在来一个范例,大表添加字段的,语句以下:

  pt-online-schema-change --user=root --password=XXX --host=localhost --lock-wait-time=120 --alter="ADD COLUMN domain_id INT" D=test,t=oss_pvinfo2 --execute

相关文章
相关标签/搜索