运维倒计时

pt-osc原理

2019-10-31  本文已影响0人  Darui30

限制

流程

0、sbtest.t1准备做DDL操作(add column)
1、create table sbtest._t1_new xxx
2、Alter table sbtest._t1_new add xxx
3、创建三个trigger用于同步新数据
create trigger pt_osc_sbtest_t1_del
create trigger pt_osc_sbtest_t1_ins ==>replace
create trigger pt_osc_sbtest_t1_upd ==>replace
4、copy老数据
INSERT LOW_PRIORITY IGNORE INTO sbtest._t1_new xxx SELECT xxx FROM sbtest.t1 LOCK IN SHARE MODE /pt-online-schema-change 30273 copy table/
5、统计新表信息
ANALYZE TABLE sbtest._t1_new
6、交换名字
RENAME TABLE sbtest.t1 TO sbtest._t1_old, sbtest._t1_new TO sbtest.t1
7、删除旧表和触发器

OPTIONS

为什么外键那么特殊

假设 t1 是要修改的表,t2 有外键依赖于 t1,_t1_new 是 alter t1 产生的新临时表。
这里的外键不是看t1上是否存在外键,而是作为子表的 t2。主要问题在 rename t1 时,t1“不存在”导致t2的外键认为参考失败,不允许rename。
pt-osc提供--alter-foreign-keys-method选项来决定怎么处理这种情况:


注意流程

参考文章
pt-online-schema-change使用说明、限制与比较
percona-toolkit 之 【pt-online-schema-change】说明

上一篇 下一篇

猜你喜欢

热点阅读