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からユーザー/パスワードを継承しないため、指定する。入替えでは短時間のメタデータロックを取得する。lock_wait_timeoutを低く保つ。ロックを取得できない場合はリトライする。

DBAtlas で開く →

関連項目