温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mysql中pt-online-schema-change怎么用

发布时间:2021-11-02 17:30:13 来源:亿速云 阅读:154 作者:小新 栏目:MySQL数据库

这篇文章主要介绍了mysql中pt-online-schema-change怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

pt-online-schema-change

限制条件

1 外键限制,配合使用–alter-foreign-keys-method参数

2 必须存在主键

3 表上不能存在after(增删改)三个触发器

alter-foreign-keys-method说明

两种方式(t1,t2有外键依赖于t1)

rebuild_constraints(优先

它先通过alter table t2 drop fk1, add _fk1重建外键,指向新表

再rename t1 t1_old,_t1_new t1 交换表名,不影响客户端

删除旧表t1_old

如果t2表太大,以致alter操作耗时过长,pt-osc有可能会强制选择另外一种方式drop_swap

drop_swap

禁用t2表外键约束检查,设置FOREIGN_KEY_CHECKS = 0

然后drop t1原表 rename _t1_new t1

这种方式速度快,也不阻塞请求,但是有风险。drop表的瞬间到rename过程,t1表是不存在,遇到请求会报错

pt-osc和online ddl对比

1 ddl在必须copy table时成本很高,不宜采用?

2 pt-osc存在触发器时,就用不了

3 修改index,foreign-key,column-name优先使用ddl,并指定ALGORITHM=INPLACE

示例

1 添加新列

pt-online-schema-change --user=user --password=xxx --host=ip --port=33066 --alter “add column col1 VARCHAR(64) NULL COMMENT ‘订单号’” D=sy,t=t1 --execute --charset=utf8  --nocheck-replication-filters --max-load=“Threads_running=20”

2 修改列类型

pt-online-schema-change --user=user --password=xxx --host=ip --port=3306 --alter “convert to character set utf8mb4 collate utf8mb4_bin” D=db1,t=t1  --execute --nocheck-replication-filters --charset=utf8 --max-load=“Threads_running=20”

3 添加删除索引

pt-online-schema-change --user=user --password=xxx --host=ip --port=3306 --alter “DROP KEY cid,add key idx_game_id(game_id)” D=db1,t=t1 --execute --charset=utf8  --nocheck-replication-filters --max-load=“Threads_running=20”

4 修改主键(假设原主键是复合主键)

会涉及以下修改动作

    4.1删除复合主键

    4.2添加新的自增主键

    4.3原复合主键字段,修改成唯一索引

        ps: 修改主键影响最大的就是delete触发器,新表t2上的主键字段在旧表t1上不存在,无法根据主键条件出发删除新表t2数据,如果表上相关列上没有索引或者没有主键,那么删除的代价非常高,所以在删除主键的同时一定添加复合索引

–alter “drop primary key, add column id auto_crement primary key,add unique key uk_pk_k(pk,k)”

5 重建表

pt-online-schema-change --user=user --password=xxx --host=ip --port=3306  --alter “engine=innodb” D=db1,t=t1 --execute --nocheck-replication-filters --charset=utf8 --max-load=“Threads_running=20” --max-lag=2s --chunk-time=1s

参数说明

execute :该参数用于执行alter操作,如果不加的话,只会做一些安全检查后退出。一定要确保知道如何使用该工具并有合适的备份后,再添加该参数。使用该参数时,除了对对象表所需的权限外,还需要SUPER, REPLICATION SLAVE两种权限。

nocheck-replication-filters:

max-lag:中断数据拷贝直到所有的复制延迟都少于这个值,默认为1S。每一个chunk拷贝完成后,OSC都会去show salve status通过Seconds_Behind_Master来确定所有的复制情况,任何相关的slave的复制延迟高于该值时,OSC就会停止数据拷贝–check-interval参数所指定的时间,然后重新发起检查,直到延迟降低到该值以下。

charset:

max-load:默认threads_running = 25,  每个chunk(chunk是啥)拷贝完,会检查show global status,检查指标是否超过了指定tr线程数的阀值,如果超过,数据拷贝暂停。

critical-load:默认threads_running = 50,每个chunk(chunk是啥)拷贝完,会检查show global status,检查指标是否超过了指定tr线程数的阀值,如果超过 终止pt进程

chunk-time:默认是0.5秒,工具会根据当前系统运行繁忙程度计算出在该指定时间内可以处理的数据行数(即chunks),(相比较chunk-size灵活)

chunk-size:指定chunk的大小

charset:  指定连接的字符集,远程操作记得加上,否则可能出现乱码  ,--charset=utf8  或 D=db1,t=t1,A=utf8

ps:

threads_running代表非sleeping状态的线程数量。

threads_running增长的原因:

1 客户端连接暴增

2 系统性能瓶颈,cpu io 内存 swap

3 异常sql

感谢你能够认真阅读完这篇文章,希望小编分享的“mysql中pt-online-schema-change怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI