Database  »  Articoli  »  MySQL 

Gli strumenti di backup di MySQL

di: Ermanno Ancona     27 Ottobre 2005

Introduzione

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 dabase 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!

Sembrerà strano ma 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: quelli che prevedono una copia dei file e quelli che prevedono una 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.

Guide Database

Guida Access

Iniziare a sviluppare database grazie alla potenza visuale offerta...

Guida SQL Server 2005

L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito...

Guida Oracle

Scoprire ed approfondire un dei più importanti RDBMS sulla scena...

Altre guide

Newsletter

Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto