DBAtlas · Atlas de operações de banco de dados

Mudança de schema online sem triggers com gh-ost

MySQLOperações online

Comando

# Connects to a replica and reads its binlog; postpones cut-over until the flag file is removed
gh-ost --host=db2 --port=3306 --user=ghost --password='Gh0st#2024' \
  --database=shop --table=orders \
  --alter="ADD COLUMN channel VARCHAR(20) NULL, ADD INDEX ix_channel (channel)" \
  --max-load=Threads_running=50 --critical-load=Threads_running=200 --max-lag-millis=1500 \
  --exact-rowcount --concurrent-rowcount --default-retries=120 \
  --postpone-cut-over-flag-file=/tmp/ghost.postpone --panic-flag-file=/tmp/ghost.panic \
  --serve-socket-file=/tmp/gh-ost.shop.orders.sock --ssl --ssl-allow-insecure --execute
# While running: status / throttle / cut-over
echo status | nc -U /tmp/gh-ost.shop.orders.sock
echo throttle | nc -U /tmp/gh-ost.shop.orders.sock
rm /tmp/ghost.postpone

O que faz

Cria uma ghost table e copia as linhas; aplica as mudanças concorrentes lendo o binlog em vez de triggers. Throttling, pausa e o momento do cut-over são controlados em tempo de execução pelo socket ou por arquivos de flag.

Quando usar

Em tabelas grandes com muitas gravações, em que o overhead de triggers é inaceitável e você quer escolher você mesmo o momento do cut-over (ex.: uma janela de tráfego baixo).

Atenção

Exige binlog_format=ROW e binlog_row_image=FULL; a réplica à qual ele se conecta precisa de log_replica_updates=ON. O usuário precisa de SUPER ou REPLICATION CLIENT / REPLICATION SLAVE mais ALL na tabela. Tabelas com foreign keys (pai ou filha) não são suportadas. Após o cut-over a tabela antiga permanece como _<table>_del; remova-a manualmente depois de verificar (--ok-to-drop-table a remove automaticamente). Versões do gh-ost anteriores à 1.1.8 usam SHOW SLAVE STATUS e param com o erro 1064 no MySQL 8.4; o suporte ao 8.4 chegou na 1.1.8. O gh-ost cria ele mesmo o arquivo indicado em --postpone-cut-over-flag-file; o cut-over não acontece até que o arquivo seja removido.

Abrir no DBAtlas →

Relacionados