Un semplice script per l'eliminazione di tutte le tabelle di un DB MySQL

Ieri mi sono trovato nella situazione di dover ricreare un database poichè le tabelle ed i dati contenuti erano cambiati.

Creare tutti gli ALTER e UPDATE del caso era fuori discussione poichè si trattava di circa 2 milioni di record e non avevo tutti gli elementi per poter procedere.

La soluzione più facile è quella di importare un dump o uno script che effettua il DROP del database e la successiva creazione from scratch (perchè dirlo così suona più figo).

Il problema? Non avevo i permessi per poter ricreare il database.

L’unica soluzione rimanente consiste nell’eliminare tutte le tabelle contenute nel database. Facile, no? NO! Qualcuno si ricorda dei vincoli di integrità referenziale? Bè io si… almeno dopo che ho lanciato il mio script ;-)

Il problema è che se sono definiti dei vincoli di integrità referenziale su una tabella e non sono definiti degli ON DELETE CASCADE, non è possibile eliminala. In soldoni se avete una relazione 1 a N tra la tabella A e la tabella B, non potete eliminare A se non eliminate prima B (per approfondire ecco un video).

L’approccio più stupido per ovviare al problema è rilanciare la vostra sfilza di DROP TABLE finchè non avete più errori e di conseguenza avrete svuotato completamente il database. Ma ci sarà pure una soluzione più elegante!

Una mia foto mentre sto per corrompere un DB di produzione

Una mia foto mentre sto per corrompere un DB di produzione

Spulciando la documentazione e facendo un po’ di sano DuckDuckGaggio, ho scoperto come disabilitare i check sui vincoli di integrità tramite il comando SET foreign_key_checks = 0; .

Fortunatamente un’anima pia ha anche messo assieme un bello snippet pronto all’uso da lanciare con Bash che trovate su GitHub:

L’unica cosa che manca allo script è il passaggio dell’host (nel caso l’istanza del DB non sia locale), ma è una cosa che si può facilmente aggiungere.

Se lo script vi è tornato utile non dimenticatevi di lasciare una star o un commento su GitHub al suo creatore!

Grazie!

Il tuo commmento è stato inviato con successo. Comparirà nella pagina a breve! OK

Oh perbacco!

Si è verificato un errore. Impossibile inviare il commento. Perfavore riprova più tardi OK

2 commenti su Un semplice script per l'eliminazione di tutte le tabelle di un DB MySQL

  1. Avatar di Joe Curto Joe Curto dice:
    Ummm gli amministratori di database, MySQL in particolare, vedono il parametro -p sulla linea di comando come fumo negli occhi :) Meglio levarlo: tanto il ti verrebbe chiesta in automatico in sua assenza e soprattutto cosi non lasci traccia nel file history della password!!
    1. Avatar di HyperTesto HyperTesto dice:

      Ciao, hai pienamente ragione!

      Per me si trattava di una soluzione punk dell’ultimo minuto perciò la password in chiaro non era un problema. Meglio aggiornare l’articolo e non diffondere cattive pratiche. :-)

      Grazie!

      Lascia un commento