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

하는 일

새 구조로 빈 사본을 만들고, 행을 chunk 단위로 복사하며, 복사 중 변경을 트리거로 반영하고, 마지막에 원자적 RENAME으로 테이블을 교체한다. 부하나 replica 지연이 임계값을 넘으면 스스로 속도를 줄이거나 일시 중지한다.

사용 시점

COPY가 필요하거나(컬럼 타입, charset, PK 변경) 긴 replica 지연을 일으킬 ALTER용.

주의

테이블에 PK나 unique key가 필요하다. 트리거는 마이그레이션 중 모든 쓰기에 오버헤드를 추가하므로 쓰기가 매우 많은 테이블에서는 gh-ost의 영향이 더 적다. 자식 테이블이 foreign key로 이 테이블을 참조하면 --alter-foreign-keys-method=auto가 필요하다. caching_sha2_password 계정은 DSN에 s=1(TLS)을 추가한다. 그렇지 않으면 replica 연결이 'Authentication requires secure connection'으로 실패한다. --check-replica-lag DSN은 기본 DSN의 user / password를 상속하지 않으므로 직접 지정한다. 교체 시 짧은 metadata lock을 잡는다. lock_wait_timeout을 낮게 유지하며, 락을 얻지 못하면 재시도한다.

DBAtlas에서 열기 →

관련 항목