文档首页/ 云数据库 RDS/ 故障排除/ RDS for MySQL/ 其他使用问题/ pt-osc工具连接RDS for MySQL主备实例卡住
更新时间:2022-10-26 GMT+08:00

pt-osc工具连接RDS for MySQL主备实例卡住

场景描述

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

原因分析

pt-osc的工作原理:

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

因为涉及大量数据复制,对于有从库的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官方文档