Cluster of Hard Drives

MySQL InnoDB Recupero Dati

Qualche giorno fa avevo qualcosa come 80 schede aperte fra Chrome e Safari, Atom (anch’esso con diverse schede aperte), numerose altre applicazioni e (udite, udite!) ad un certo punto ho deciso che volevo “giocare” con Garage Band e i suoi “allegri” sintetizzatori. Naturalmente tutto questo senza pensare di chiudere qualche scheda aperta dei browser. Ci mancherebbe!
Il risultato è stato che il Macbook è crashato. Un crash del genere non mi capitava da almeno un anno.

Fin qui tutto bene, salvo che dopo questo evento, MySQL non riusciva più ad avviarsi, si chiudeva da solo poco dopo il lancio. Guardando i log sono arrivato alla conclusione che probabilmente qualche tabella si era corrotta. Ho provato ad aggiornare MySQL ad una versione più recente ma senza successo.
Ho all’incirca 50 database, installati in locale, per i miei progetti di sviluppo Web e non faccio dei backup quotidiani (è una buona lezione per pianificare una soluzione automatica e giornaliera) e opto piuttosto per farli quando ritengo sia il caso. Avevo una copia di backup della versione locale di questo sito risalente a circa 4 giorni fa. Sarebbe stato comunque sufficiente ma io volevo provare a ripristinare lo stato in cui si trovava poco prima dell’incidente. Per ciò ho provato a cercare su internet una soluzione per recuperare i dati.

Innanzitutto devo premettere che le tabelle dei database (prevalentemente installazioni locali di WordPress) sono state create utilizzando InnoDB come engine. Non ne so molto in materia ma Oracle ha pubblicato a suo tempo delle utilità fra le quali esiste un utilissima applicazione che si chiama mysqlfrm e fa parte di un pacchetto, le MySQL Utilities, che si possono scaricare da questo indirizzo: https://downloads.mysql.com/archives/utilities/. L’installazione è semplicissima ma prima di poterle usare bisogna ricordarsi anche di installare un’altro pacchetto dal quale dipendono: MySQL Connector/Python. Una volta installato questo pacchetto avrete tutto quello che vi serve per procedere col recupero dati.

Nota

A quanto dicono nel sito ufficiale le utilità in questione dovrebbero trovarsi anche all’interno di MySQL Workbench ma, almeno nella versione che avevo già installata sul Macbook, non sono riuscito a trovare mysqlfrm. Ora sto provando ad installare l’ultima release di MySQL Workbench e vedremo…
MySQL WorkBench - MySQL Utilities

MySQL WorkBench – MySQL Utilities

Una volta che avrete installato questi due programmi potreste anche eseguire tutta la procedura manualmente come spiegato in innumerevoli articoli sul Web ma ho deciso di semplificarvi ulteriormente la vita. Ho appena finito di scrivere fra ieri e oggi uno Shell Script (compatibile con tutti gli ambienti Unix e Unix Like) che fa tutto da solo. Lo potete scaricare da qui: recover_innodb.

Per eseguirlo è facilissimo, aprite l’applicazione Terminale e eseguite questo comando:

Le opzioni per ora sono:

  • -d, per indicare il nome del database risultante,
  • -b, per indicare il percorso della directory “data” di destinazione,
  • -s, per indicare il nome del database originario,
  • -c, per indicare il percorso della directory “data” originaria.

Se non sbagliate a scrivere i percorsi lo script dovrebbe funzionare correttamente.

Buon recupero dati!