In questo tutorial vedremo come sia possibile effettuare il ripristino di una singola tabella MySQL nel caso in cui, ad esempio, si siano già effettuate le operazioni di REPAIR e sia stato verificato un certo numero di errori nel log di sistema. L’operazione in questione consta di due fasi distinte: da un lato, inizialmente, dovremo ricopiare il contenuto della tabella problematica all’interno di un file di testo; successivamente andremo a rimuovere la vecchia tabella e poi a ricopiarne i contenuti nuovamente mediante un apposito dump.
L’operazione non garantisce che il vostro sito riprenda a funzionare in tutti i casi, chiaramente, ma può essere utile se ad esempio rilevati rallentamenti o blocchi del server MySql e se nel log MySql trovate traccia del nome della tabella corrotta in un qualche messaggio di errore, specie se ripetuto più volte. In molti casi, quindi, le operazioni di riparazione delle tabelle si possono effettuare semplicemente da linea di comando MySql (dopo aver fatto login in SSH e successivamente digitato mysql -p con rispettiva password):
REPAIR TABLE `nome_tabella`
oppure possiamo fare lo stesso, volendo, sfruttando l’interfaccia web di software come PHPMyAdmin. L’operazione che descriviamo in questo articolo è un cosiddetto dump/reload che viene suggerito come procedura di ripristino dati qualora si verifichi qualche problema nel normale funzionamento del sito a livello di database. Prima di effettuare ogni operazione descritta è bene scaricarsi una copia completa dello stesso, oppure ricorrere ad una soluzione di backup, in modo da evitare di compromettere, anche involontariamente, tutti o buona parte dei nostri dati. Nel tutoral linkato abbiamo descritto in particolare come sia possibile fare un backup in formato file di testo, cosa possibile anche con qualcosa del genere (dal terminale SSH):
mysqldump -p -u username nome_database > /tmp/dump_database.sql
che, dopo l’inserimento della password ci permetterà di disporre di una copia dei dati nella cartella /tmp. Ricordiamo che dovrete disporre delle seguenti credenziali di accesso per agire in questa direzione:
- nome preciso del database;
- username MySQL (distinta da quella che usate per il pannello di controllo e per il sito);
- password MySQL (distinta da quella che usate per il pannello di controllo e per il sito);
Passo 1: copia della singola tabella in un file
Come prima cosa ci dobbiamo fare una copia della tabella in formato file, e per fare questo andiamo a scrivere da terminale (ammettendo di voler ripristinare la tabella di WordPress wp_options):
mysqldump -p nome_database wp_options > /tmp/wp_options.sql
Passo 2: cancellazione vecchia tabella
Dopo aver copiato la tabella nel file andiamo a rimuovere la vecchia versione, perchè tanto a breve la andremo a ricreare (attenzione: durante questa fase del lavoro di ripristino è opportuno disabilitare il server Apache, perchè il vostro sito non funzionerà): prima scriviamo su terminale SSH
mysql -p
poi andiamo a scrivere la nostra password MySQL (ammettiamo di stare accedendo come utenti root) e da terminale MySql andiamo a scrivere:
drop table wp_options
Per disabilitare il server Apache si usa qualcosa tipo:
service apache2 stop
Passo 3: copia del dump della tabella
A questo punto possiamo ricreare la tabella dal file .sql creato in precedenza:
mysql -p nome_database < /tmp/wp_options.sql
che copierà wp_options all’interno del database ricreando integralmente la tabella.
Passo 4: riattivazione dei server Apache/MySql
A questo punto è opportuno riavviare sia MySql che Apache (su Debian):
service apache2 start
e poi, sempre da terminale:
service mysql restart
il che concluderà le operazioni in questione. Se volete cancellare il file temporaneo potete scrivere, sempre da terminale:
rm /tmp/wp_options.sql