mysql pt online ddl_MySQL Online DDL 工具之pt-online-schema-change

MySQL DDL:

DDL是一个令所有MySQL dDBA

诟病的一个功能,因为在MySQL中在对表进行dDDL时,会锁表,当表比较小比如小于1W行时,对前端影响较小,当时遇到千万级别的表,就会影响前端应用对表的写操作!

InnoDB引擎是通过以下步骤来进行DDL的:

1、按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)

2、在原表上加write lock,阻塞所有更新操作(insert、delete、update等)

3、执行insert into tmp_table select * from

original_table

4、rename original_table和tmp_table,最后drop

original_table

5、释放 write lock。

可以看见在InnoDB执行DDL的时候,原表是只能读不能写的。为此 perconal 推出一个工具

pt-online-schema-change ,其特点是修改过程中不会造成读写阻塞。

工作原理:

如果表有外键,除非使用 --alter-foreign-keys-method

指定特定的值,否则工具不予执行。

1 创建一个和你要执行 alter 操作的表一样的空表结构。

2 执行表结构修改,然后从原表中的数据到copy到 表结构修改后的表,

3 在原表上创建触发器将 copy 数据的过程中,在原表的更新操作 更新到新表.

注意:如果表中已经定义了触发器这个工具就不能工作了。

4 copy 完成以后,用rename table 新表代替原表,默认删除原表。

用法介绍:

pt-online-schema-change [OPTIONS] DSN

options 可以自行查看 help,DNS 为你要操作的数据库和表。这里有两个参数需要介绍一下:

--dry-run

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

--execute

这个参数的作用和前面工作原理的介绍的一样,会建立触发器,来保证最新变更的数据会影响至新表。注意:如果不加这个参数,这个工具会在执行一些检查后退出。

依赖条件:

操作的表必须有主键否则

报如下错误:

[root@hank-yoon ~]# pt-online-schema-change -u root -pyoon

-h127.0.0.1 --alter='add column vname

varchar(20)' --execute D=yoon,t=yoon

No slaves found.  See --recursion-method if host

hank-yoon.com has slaves.

Not checking slave lag because no slaves were found and

--check-slave-lag was not specified.

Operation, tries, wait:

copy_rows, 10, 0.25

create_triggers, 10, 1

drop_triggers, 10, 1

swap_tables, 10, 1

update_foreign_keys, 10, 1

Altering `yoon`.`yoon`...

Creating new table...

Crea

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值