这篇文章主要介绍了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_swapdrop_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=utf8ps:threads_running代表非sleeping状态的线程数量。threads_running增长的原因:1 客户端连接暴增2 系统性能瓶颈,cpu io 内存 swap3 异常sql感谢你能够认真阅读完这篇文章,希望小编分享的“mysql中pt-online-schema-change怎么用”这篇文章对大家有帮助,同时也希望大家多多支持云技术,关注云技术行业资讯频道,更多相关知识等着你来学习!
这篇文章主要讲解了“如何让SQL运行得更快”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何让SQL运行得更快”吧! 人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之…