利用percona-toolkit中pt-online-schema-change功能对表进行online ddl

在线上系统经常遇到对表进行ddl,大家都知道,在线ddl会阻塞所有insert,一直到ddl结束才释放,的如果表比较小的话,对业务影响不大,如果表非常大的话,则应用是无法忍受的,这里可以利用percona-toolkit中的pt-online-schema-change工具来对表进行online。

mysql默认online ddl的原理如下:

1、创建一个和原来表结构一样的临时表并ddl

2、锁住原表,所有数据都无法写入(insert,update,delete)

3、将原表数据写入到临时表中(通过insert ...select方式)

4、写入完后,重命名临时表和原表名称

5、删除原表,释放锁

pt-online-schema-change在线ddl原理如下:

1、创建一个和原来表结构一样的临时表并ddl

2、将原表数据写入到临时表中(通过insert ...select方式),并且在原表上创建触发器,如果原表有数据写入,通过触发器方式将新增的数据写入临时表中(前提该表之前没有触发器)

3、写入完后,重命名临时表和原表名称

4、删除原表

pt-online-schema-change使用介绍:

操作的表必须有主键

[mysql@mysqldb01 bin]$./pt-online-schema-change -h 192.168.11.123 -u root -pwanwen1027  --alter='add column createtime datetime' --execute D=viven,t=c
No slaves found.  See --recursion-method if host mysqldb01 has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
  analyze_table, 10, 1
  copy_rows, 10, 0.25
  create_triggers, 10, 1
  drop_triggers, 10, 1
  swap_tables, 10, 1
  update_foreign_keys, 10, 1
Altering `viven`.`c`...
Creating new table...
Created new table viven._c_new OK.
Altering new table...
Altered `viven`.`_c_new` OK.
2016-11-21T18:04:04 Creating triggers...
2016-11-21T18:04:04 Created triggers OK.
2016-11-21T18:04:04 Copying approximately 1 rows...
2016-11-21T18:04:04 Copied rows OK.
2016-11-21T18:04:04 Analyzing new table...
2016-11-21T18:04:04 Swapping tables...
2016-11-21T18:04:04 Swapped original and new tables OK.
2016-11-21T18:04:04 Dropping old table...
2016-11-21T18:04:04 Dropped old table `viven`.`_c_old` OK.
2016-11-21T18:04:04 Dropping triggers...
2016-11-21T18:04:04 Dropped triggers OK.
Successfully altered `viven`.`c`.
[mysql@mysqldb01 bin]$

完成

具体教程参考

https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值