码迷,mamicode.com
首页 > 其他好文 > 详细

pt-online-schema-change使用

时间:2015-08-25 19:46:52      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

公司一个业务的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数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。如果表中已经定义了触发器这个工具就不能工作了。

  用法介绍:

  pt-online-schema-change [OPTIONS] DSN

  options可以自行查看help,DNS为你要操作的数据库和表。

  这里有两个参数需要介绍一下:

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

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

  使用示例:

  在线更改表的的引擎,这个尤其在整理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

pt-online-schema-change使用

标签:

原文地址:http://my.oschina.net/u/2338362/blog/497006

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!