Gli strumenti di backup di MySQL

20 marzo 2006

Non ricordo dove ho sentito questa frase, ma mi è sempre parsa molto azzeccata: “Il backup è quella cosa totalmente inutile finché non serve”.

Una delle incombenze, ahimé, del database admin in caso di “disastro”, è ripristinare la situazione precedente all’incidente… preferibilmente nel minor tempo possibile. Chiunque si sia trovato ad affrontare una situazione simile o causata da un problema hardware, o da errore umano, sa che la sensazione è alquanto spiacevole.

Adottiamo, quindi, alcune strategie che ci facciano dormire sonni più tranquilli. Ovviamente l’impegno sarà commisurato all’importanza dei dati di cui siamo responsabili, se si tratta del nostro sito personale al massimo potremo prendercela con noi stessi. Il discorso cambia se rischiamo il linciaggio da parte di una torma di clienti inferociti. Un piccolo consiglio: provate di tanto in tanto un restore dei dati prima di trovarvi di fronte all’emergenza. Sarebbe terribile scoprire solo in quel momento che qualcosa non ha funzionato!

MySQL mette a disposizione vari strumenti di backup e restore: starà a noi scegliere quale preferiamo o quale sia più adatto alla situazione contingente. Questo articolo vi fornirà una panoramica di tali strumenti con particolare riferimento alle tabelle di tipo MyISAM. Come al solito la documentazione ufficiale in proposito è molto esauriente, per consultarla potete partire dalla sezione Database Backups.

Le tabelle di MySQL

MySQL gestisce le tabelle come file: i dati sono memorizzati in un file del tipo nome_tabella.MYD, la struttura in nome_tabella.frm e gli indici in nome_tabella.MYI. Potete trovarli nella cosiddetta datadir, in Windows di default è la sottodirectory data della directory di installazione. Se usate Linux la directory è mysql, ad esempio il percorso su Fedora è /var/lib/mysql. La posizione può essere comunque configurata a piacere attraverso il file my.cnf o my.ini. A ciascun database corrisponde una directory con il medesimo nome, all’interno della quale troverete i file relativi alle singole tabelle.

Detto questo possiamo grossolanamente suddividere i sistemi di backup in due categorie:

  • backup prevede la copia dei file;
  • backup che prevede la copia dei dati.

Un primo metodo elementare

Il primo sistema di backup è, oserei dire, banale e consiste nel copiare manualmente i file corrispondenti alle tabelle o le intere directory corrispondenti ai database. Mi raccomando fermate il server prima di procedere e riavviatelo una volta terminata l’operazione. In realtà non sarebbe strettamente necessario: si potrebbe operare un LOCK e un FLUSH delle tabelle prima della copia e poi un UNLOCK una volta terminato. Vedremo più avanti che esiste un’apposita utility che svolge questo compito senza complicarci eccessivamente la vita.

I file così ottenuti possono essere in un secondo momento copiati nella directory destinata ai dati per effettuarne il restore. Personalmente non ho trovato nessun problema a trasferire dati anche tra linux e windows e neppure da una vecchia versione di MySQL ad una nuova.

Backup table e restore table

Questo metodo viene attualmente considerato “deprecato”, in virtù di altri strumenti migliori, risulta utilizzabile a livello di comando SQL. Funziona solo con tabelle MyISAM ed effettua una copia dei file .frm e .MYD. Gli indici .MYI potranno essere ricostruiti a partire da questi ultimi. La sintassi è:

BACKUP TABLE nome_tabella TO '/directory/di/destinazione'

Vediamo subito un esempio, supponendo di avere una tabella di nome “utenti” all’interno del database “articolo”:

mysql> USE articolo;
Database changed

mysql> BACKUP TABLE utenti TO '/tmp';
+-----------------+--------+----------+----------+
| Table           | Op     | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| articolo.utenti | backup | status   | OK       |
+-----------------+--------+----------+----------+
1 row in set (0,02 sec)

Nella directory tmp troveremo i file utenti.frm e utenti.MYD. Una piccola notazione per chi usa Windows, il percorso di destinazione va’ scritto alla “unix”, ovvero l’equivalente dell’esempio precedente sarà ‘c:/tmp‘ altrimenti otterremo un errore del tipo: Failed copying .frm file.

Per ripristinare i file salvati possiamo usare il comando RESTORE TABLE che rappresenta il contraltare di BACKUP TABLE. Oltre ad creare una copia dei file .frm e .MYD ricostruirà gli indici. Badate che il comando non effettua sovrascritture quindi, se i file esistono già, riceverete un messaggio d’errore. Dovrete necessariamente eliminarli dalla directory di destinazione. Di seguito la sintassi:

RESTORE TABLE nome_tabella FROM '/directory/di/destinazione'

Cancelliamo la tabella prova dal nostro database articolo e proviamo il restore:

mysql> DROP TABLE utenti;
Query OK, 0 rows affected (0,00 sec)

mysql> RESTORE TABLE utenti FROM '/tmp';
+-----------------+---------+----------+----------+
| Table           | Op      | Msg_type | Msg_text |
+-----------------+---------+----------+----------+
| articolo.utenti | restore | status   | OK       |
+-----------------+---------+----------+----------+
1 row in set (0,01 sec)

La tabella risulta così ripristinata, controllate la datadir del vostro MySQL e all’interno della directory articolo compariranno i file utenti.frm, utenti.MYD e utenti.MYI.

Se vuoi aggiornamenti su Gli strumenti di backup di MySQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Gli strumenti di backup di MySQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy