DBAtlas · 数据库运维图谱

使用 pt-online-schema-change 对大表执行非阻塞 ALTER

MySQL在线操作

命令

# First --dry-run, then the same command with --execute; throttles on replica lag
pt-online-schema-change --alter "ADD COLUMN region CHAR(2) NULL, ADD INDEX ix_region (region)" \
  D=shop,t=orders,h=db1,u=osc,p='Osc#2024',s=1 \
  --max-lag=5 --check-replica-lag h=db2,u=osc,p='Osc#2024',s=1 \
  --max-load Threads_running=50 --critical-load Threads_running=200 \
  --set-vars lock_wait_timeout=5 --noversion-check --dry-run

作用

创建一个新结构的空副本,分块复制行,在复制期间用触发器同步变更,最后用原子 RENAME 交换表。当负载或副本延迟超过阈值时,它会自行减速/暂停。

适用场景

用于需要 COPY 的 ALTER(列类型、字符集、PK 变更),或会造成长时间副本延迟的 ALTER。

注意

表需要有 PK 或唯一键。迁移期间触发器会给每次写入增加开销;在写入非常密集的表上,gh-ost 的影响更小。如果子表通过外键引用此表,需要 --alter-foreign-keys-method=auto。对于 caching_sha2_password 账户,请在 DSN 中添加 s=1(TLS);否则副本连接会因 'Authentication requires secure connection' 失败。--check-replica-lag 的 DSN 不会继承主 DSN 的 user / password;请单独指定。交换时会短暂获取元数据锁;请保持较低的 lock_wait_timeout,无法获取锁时它会重试。

在 DBAtlas 中打开 →

相关内容