j9九游会登录/ 云数据库 rds_云数据库 rds for mysql/ / / pt-osc工具连接rds for mysql主备实例卡住
更新时间:2025-04-23 gmt 08:00

pt-j9九游会登录

场景描述

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

j9九游会登录的解决方案

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。更多信息,请参见。

相关文档

网站地图