Sto cercando di capire il modo migliore per affrontare l'esecuzione di uno script SQL monouso all'avvio di un'istanza di servizio. Ecco lo scenario:
- Eseguiamo più istanze Amazon del nostro servizio in parallelo.
- Ogni istanza si connette allo stesso database MySQL.
- Con ogni aggiornamento del servizio, vogliamo eseguire uno script SQL monouso per aggiornare lo schema del DB.
- Vogliamo solo un'istanza per eseguire lo script.
- Vogliamo che altre istanze attenderanno / blocceranno fino al completamento dell'aggiornamento.
La maggior parte delle operazioni nello script sono idempotenti e finora l'esecuzione dello script su tutte le istanze non rappresentava un problema. Le ultime modifiche includono alcune gocce di colonna e altre dichiarazioni non idempotenti. Questi stanno causando errori durante l'avvio.
Posso pensare ad alcuni modi per affrontare questo problema:
- Designare un'istanza del server "primaria" per eseguire l'aggiornamento e avere non primari controlla che l'aggiornamento sia stato eseguito.
- Blocco su una tabella specifica prima di eseguire lo script e il rilascio del blocco solo al termine dell'aggiornamento.
- Racchiudere con cura ogni istruzione non idempotente nei controlli.
Quali problemi esistono con queste potenziali soluzioni? C'è un approccio migliore? Esiste un approccio best-practice?