Data storage: la risorsa più importante degli anni duemila

Data storage: la risorsa più importante degli anni duemila

Photo by panumas nikhomkhai from Pexels

Normalmente i backup dei database MySQL/MariaDB vengono fatti sottoforma di dump SQL, un unico file che contiene tutto il contenuto del database. Si tratta di un formato molto comodo perché è facilmente trasportabile e si può ripristinare con estrema facilità.

Ma come fare per recuperare i dati di una sola tabella da un backup completo?

Una soluzione può essere quella di ripristinare il backup in un database separato e poi trasferire solamente la tabella in questione. È un metodo che funziona ma richiede un po' di tempo.

Una soluzione alternativa, e molto più rapida, per ripristinare solo una tabella a partire dal dump di un database MySQL o MariaDB e sfruttando il comando sed ed una espressione regolare ad hoc:

sed -n -e '/DROP TABLE.*`nome_della_tabella`/,/UNLOCK TABLES/p' nome_dump.sql > nome_dump_parziale.sql

Dove nome_della_tabella è appunto il nome della tabella da estrarre, nome_dump.sql è il nome del file di dump del database completo, ed infine nome_dump_parziale.sql è il nome del nuovo file che conterrà il dump della singola tabella.

Una volta eseguito il comando basterà eseguire da un qualunque client SQL lo script nome_dump_parziale.sql per ripristinare soltanto la tabella in esame.

A puro titolo informativo ecco più in dettaglio come funziona il comando.

Per prima cosa si utilizza una espressione regolare (regex) tramite il comando sed che estrapola la sottostringa del dump contenente la porzione relativa alla tabella che si desidera recuperare. Il comando cerca la stringa che comincia con DROP TABLE.*`nome_della_tabella` e finisce alla prima occorrenza della stinga UNLOCK TABLES.

Normalmente l’output di sed è a video, quindi come si fa sempre in questi casi, su usa il simboli di maggiore > che reindirizza l’output di un comando in un file specifico.

Se avessimo più tabelle da estrarre ci basta ripetere il comando cambiando il nome del file di destinazione, oppure unendo il tutto usando due volte il simbolo di maggiore >> che concatena l’output alla fine del file (mentre nel caso precedente il file viene completamente sovrascritto).

Leonardo Finetti

Leonardo Finetti
Si occupa di informatica dalla metà degli anni novanta principalmente in ambito web con tecnologie Open Source. Esperto di Drupal e di SEO offre consulenze in tali ambiti e nel tempo libero si diletta scrivendo articoli di informatica ed anche di design, ergonomia, usabilità e sicurezza.

Se ti piace questo sito puoi usare il link di affiliazione Amazon cliccando qui.