ALTER sin bloqueos sobre una tabla grande con pt-online-schema-change
MySQLOperaciones en líneaComando
# 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-runQué hace
Crea una copia vacía con la nueva estructura, copia las filas en chunks, replica los cambios durante la copia con triggers y finalmente intercambia las tablas con un RENAME atómico. Se ralentiza / pausa por sí solo cuando la carga o el lag de las réplicas superan los umbrales.
Cuándo usarlo
Para ALTER que necesitan COPY (tipo de columna, charset, cambio de PK) o que causarían un lag largo en las réplicas.
Precaución
La tabla necesita una PK o una unique key. Los triggers añaden sobrecarga a cada escritura durante la migración; en tablas con muchísimas escrituras gh-ost tiene menos impacto. Si hay tablas hijas que referencian esta tabla mediante foreign keys, se requiere --alter-foreign-keys-method=auto. Para cuentas caching_sha2_password añada s=1 (TLS) al DSN; de lo contrario la conexión a la réplica falla con 'Authentication requires secure connection'. El DSN de --check-replica-lag no hereda usuario / contraseña del DSN principal; indíquelos. El intercambio toma un breve metadata lock; mantenga bajo lock_wait_timeout, reintenta si no consigue el bloqueo.