Se c’è una cosa che amo alla follia in MySQL è l’utility mysqldump.
Per i tre o quattro che non lo sapessero, mysqldump crea un dump di un database in un file di testo, usando una sintassi SQL. In pratica con mysqldump si salva la sequenza di comandi SQL, che portano allo stato attuale del database, dalla prima CREATE TABLE fino all’ultima INSERT INTO.
E’ facile immaginare quanto utile sia mysqldump, per creare snapshot di database da usare come backup, o per migrare un database da una macchina ad un altra, e con qualche accorgimento anche per migrare da MySQL ad un database diverso.
Tanto per fare un esempio, supponiamo di avere un database che si chiama testdb, e di voler creare un dump di questo database. Impartendo:
# mysqldump testdb > testdb.sql
otterremo un file, testdb.sql contenente l’immagine del database testdb in forma di semplici statement SQL.
A questo punto per ripristinare il database basta prima ricreare il database vuoto e poi eseguire i comandi SQL contenuti in testdb.sql:
# mysqladmin drop testdb
# mysqladmin create testdb
# mysql testdb < testdb.sql
Tralasciando i dettagli sull’uso di mysqldump, per i quali potete consultate la relativa pagina man, qui di seguito vi riporto uno script perl che, ogni volta che viene eseguito, crea un backup di tutti i database presenti sull’istanza di MySQL, in una directory predisposta, salvando i backup precedenti fino ad un numero prestabilito. In pratica, schedulando questo script in modo che venga eseguito una volta al giorno, potrete avere un’immagine giornaliera di tutti i vostri database, con la possibilità di risalire indietro nel tempo di un numero di giorni che potete configurare.