DBAtlas · Veritabanı operasyon atlası

pt-online-schema-change ile büyük tabloda kesintisiz ALTER

MySQLOnline İşlemler

Komut

# Once --dry-run, sonra ayni komut --execute ile; replika lag'ine gore yavaslar
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

Ne yapar?

Yeni yapıda boş bir kopya tablo oluşturur, satırları chunk'lar halinde kopyalar, kopyalama sırasında gelen değişiklikleri trigger'larla yansıtır ve sonunda atomik RENAME ile tabloları değiştirir. Yük ve replika lag'i eşiği aşınca kendiliğinden yavaşlar / durur.

Ne zaman kullanılır?

COPY gerektiren (kolon tipi, charset, PK değişikliği) veya replikada uzun lag yaratacak ALTER'ler için.

Dikkat

Tabloda PK veya unique key olmalı. Trigger'lar migration boyunca her yazmaya ek maliyet bindirir; çok yoğun yazmalı tabloda gh-ost daha az etkilidir. Child tablolar bu tabloya foreign key ile bağlıysa --alter-foreign-keys-method=auto gerekir. caching_sha2_password hesaplarında DSN'e s=1 (TLS) ekle; aksi halde replika bağlantısı 'Authentication requires secure connection' ile düşer. --check-replica-lag DSN'i kullanıcı / parolayı ana DSN'den devralmaz, açıkça yaz. Swap anında kısa metadata lock alır; lock_wait_timeout düşük tutulur, lock alınamazsa tekrar dener.

DBAtlas'ta aç →

İlgili