华为云云数据库rdspt-osc工具连接RDS for MySQL主备实例卡住_云淘科技

场景描述

使用pt-osc工具(pt-online-schema-change)进行online DDL操作时,会遇到连接本地单机实例执行命令成功,但连接云上RDS for MySQL主备实例会卡住的情况,如下图所示,没有输出:

原因分析

pt-osc的工作原理:

创建一个与原表结构相同的空表,表名是 _new 后缀。
修改1创建的空表的表结构。
在原表上加三个触发器:delete/update/insert,用于复制数据过程中,将原表中要执行的语句在新表中执行。
将原表数据以数据块(chunk)的形式复制到新表。
rename原表为旧表,并把新表rename为原表名,然后删除旧表。
删除触发器。

因为涉及大量数据复制,对于有从库的MySQL,必然会带来主备复制延迟,可能影响从库业务。考虑从库延迟情况,pt-osc工具提供以下几个控制选项:

–max-lag
–check-interval
–recursion-method
–check-slave-lag

因此,从库延迟超过max-lag,则停止复制数据,等待check-interval秒后再开始复制数据;check-slave-lag指定slave的机器,只会对比这台slave的延迟情况。recursion-method是主库寻找从库的方法:processlist(默认值,关注从库延迟)、hosts、dsn、none(忽略从库延迟)。更多信息,请参见pt-osc官方文档。

本案例场景中:

pt-osc工具连接云上RDS for MySQL主备实例卡住,是因为存在主从复制延迟导致工具停止复制数据。配置项“–recursion-method=none”表示忽略主从延迟,添加该配置项可以解决问题。
忽略主从延迟,会导致复制数据比较快,当需要尽可能的对服务产生小的影响,可以设置“–max-load”配置项。

解决方案

pt-osc工具加上“–recursion-method=none”配置项,忽略复制延迟,即可解决问题。

pt-osc常见命令参考:

增加字段

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “ADD COLUMN content text” D=aaa,t=tmp_test –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –print –execute

删除字段

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “DROP COLUMN content ” D=aaa,t=tmp_test –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –quiet –execute

修改字段

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “MODIFY COLUMN age TINYINT NOT NULL DEFAULT 0” D=aaa,t=tmp_test –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –quiet –execute

字段改名

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “CHANGE COLUMN age address varchar(30)” D=aaa,t=tmp_test –no-check-alter –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –quiet –execute

增加索引

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “ADD INDEX idx_address(address)” D=aaa,t=tmp_test –no-check-alter –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –print –execute

删除索引

pt-online-schema-change –user=root –password=xxx –host=xxx –alter “DROP INDEX idx_address” D=aaa,t=tmp_test –no-check-alter –no-check-replication-filters –alter-foreign-keys-method=auto –recursion-method=none –print –execute

如果业务需要关注复制延迟,可以根据业务需要调整如下参数:max-lag、check-interval、recursion-method、check-slave-lag。更多信息,请参见pt-osc官方文档。

父主题: 其他使用问题

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家