DBAtlas · Atlas d'exploitation des bases de données

ALTER non bloquant sur une grande table avec pt-online-schema-change

MySQLOpérations en ligne

Commande

# 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

Ce que fait la commande

Crée une copie vide avec la nouvelle structure, copie les lignes par chunks, reproduit les changements pendant la copie au moyen de triggers et échange finalement les tables par un RENAME atomique. Il ralentit / se met en pause de lui-même lorsque la charge ou le retard des répliques dépasse les seuils.

Quand l'utiliser

Pour les ALTER qui nécessitent COPY (type de colonne, charset, changement de PK) ou qui provoqueraient un long retard de réplique.

Attention

La table doit avoir une PK ou une clé unique. Les triggers ajoutent une surcharge à chaque écriture pendant la migration ; sur les tables à très forte écriture, gh-ost a moins d'impact. Si des tables enfants référencent cette table par clés étrangères, --alter-foreign-keys-method=auto est requis. Pour les comptes caching_sha2_password, ajoutez s=1 (TLS) au DSN ; sinon la connexion à la réplique échoue avec 'Authentication requires secure connection'. Le DSN de --check-replica-lag n'hérite pas de l'utilisateur / mot de passe du DSN principal ; indiquez-les. L'échange prend un bref metadata lock ; gardez lock_wait_timeout bas, il réessaie si le verrou ne peut pas être obtenu.

Ouvrir dans DBAtlas →

Voir aussi