最苦逼的是其中两个主表都特别大,一个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
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22418990/viewspace-1253494/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22418990/viewspace-1253494/