Alzi la mano chi non ha mai eliminato dati per sbaglio! Alzi la mano chi non ha fatto il backup. Se hai alzato la mano 2 volte, ti suggerisco di prendere in considerazione le offerte di questa pagina, altrimenti continua pure a leggere.
Per recuperare i dati da un backup mysql possiamo procedere principalmente in 2 modi: uno da “scimmia” caricando tutto il database mysql dal dump sql, ed uno più “smart” riducendo notevolmente la mole di dati da ripristinare al fine di estrarre solo le righe che ci servono. Ovviamente questa seconda alternativa è utile nel caso di database di grandi dimensioni, e serve nel caso si sappia esattamente cosa è stato cancellato e quali sono le tabelle interessate. Scegliamo la via “smart”, anche perchè il tempo per ripristinare i dati è nettamente inferiore e abbiamo il fiato del cliente sul collo. Non è piacevole.
Iniziamo col recuperare il backup del database mysql e lanciamo il seguente comando:
sed -n -e '/CREATE TABLE.*`nome_tabella`/,/CREATE TABLE/p' backup_database.sql > nome_tabella.sql
dove nome_tabella è la tabella che ci interessa estrarre dal dump del database mysql.
In questo modo avremo file nome_tabella.sql, la create table ed una serie di insert per popolare i dati. A questo punto bisogna fare attenzione ad eventuali foreign keys: se la tabella che abbiamo estratto prevede delle chiavi esterne, o si estraggono anche le tabelle correlate, oppure si modifica a manina la create table in modo da eliminarle, altrimenti falliranno tutte le insert successive. Una volta fatta l’eventuale pulizia, accedere a mysql e importare i dati (supponiamo che il dump sia in /tmp/):
mysql> use my_database; mysql> source /tmp/nome_tabella.sql;
Suggerimento 1: dato che la tabella avrà lo stesso nome di quella originale, suggerisco di creare un database temporaneo, importare la tabella desiderata, rinominarla, esportarla nuovamente col nuovo nome (e quindi anche le insert saranno con il nuovo nome) e solo allora caricarla sul server mysql in produzione per fare i necessari controlli. In questo modo si evita il rischio di fare ulteriori danni, dato che (se stai leggendo questo articolo) probabilmente stai già rischiando la morte. Per rinominare una tabella:
RENAME TABLE `nome_database`.`vecchio_nome_tabella` TO `nome_database`.`nuovo_nome_tabella` ;
Suggerimento 2: nel caso di file di dump molto pesanti, aprire in editing il file può essere un problema. In tal caso conviene disabilitare temporaneamente l’integrità referenziale (le foreign keys), procedere all’import dei dati, rimuovere dalla tabella i vincoli tramite comandi sql, e ripristinare nuovamente i controlli di integrità.
Auguri!