功能介绍: 数据库
功能为在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