La classe MySQLDump è stata aggiornata a una nuova versione e questo articolo contiene informazioni obsolete. Per informazioni sulla nuova versione controllare l’articolo sulla nuova versione

In questi giorni ho deciso di scrivermi uno script su linux, per aggiornare automaticamente la mia copia in locale di questo “FANTASTICO” sito, in modo da potere smanettare sul css e sulle pagine, senza disturbare i lettori. Sinceramente mi sembrava una cosa veloce, infatti dovevo semplicemente fare il dump del database mysql di aruba, riversare il tutto nel mio db locale e opzionalmente scaricare l’intero sito via ftp. Senonché ho, tristemente, scoperto che aruba non dota i suoi “hosting server” del comando “mysqldump” (ottima utility che consente velocemente di fare il dump completo di un db mysql).

Lamp

A questo punto ho deciso di sbracciarmi le maniche e ho capito che avrei dovuto mettere mano al php. Per evitare di iniziare da zero, ho cercato qualcosa di più o meno pronto da modificare il meno possibile.

Cercando sul web ho trovato una classe che faceva proprio al caso mio. Provandola ho notato che:

  1. memorizza tutto il dump in una variabile (con il risultato che superata una certa mole di dati, apache mi da errore);
  2. dumpa male le chiavi primarie e gli indici;
  3. non converte i dati blob, tinyblob, text … in esadecimale;
  4. il dump contiene sia la struttura del db, che i dati, non permettendomi di scegliere;
  5. non dumpa i vincoli di integrità referenziale, e i motori di memorizzazione delle tabelle (e: MyISAM, InnoDB, …).

In ogni caso è sempre meglio di niente! A LAVORO!

Racimolando il mio tempo libero, in una settimana, sono riuscito ad ottenere un dump, che quantomeno non mi desse errori in fase di importazione. Ho risolto i bug 1, 2, 3, 4 e ho aggiunto la possibilità di comprimere il dump in formato gzip. Eccovi un esempio :

<?php

//se t=1 dumpa i dati, altrimenti la struttura
$data=$_GET['t'];
require(”class_mysqldump.php”);

//Istanzio la classe con l’host del db, in questo caso localhost;
// il nome utente “root”; la password “”
$dump = new MySQLDump(”localhost”, “root”, “”);

//per generare file non compressi commentare la riga precedente
// e scommentare la seguente
//$dump = new MySQLDump(”localhost”, “root”, “”, False);

if ($data==”1″) {
	//dump dei dati. il valore 100 indica ogni quante righe
	//deve riscrivere l’istruzione “insert”,
	//così da risparmiare spazio. Se avete problemi settatela a 1.
	$dump->dumpDatabaseData(”nomedb”, $filename, 100);

	//se volete che i vostri campi di dati (tipo blob, text …)
	//non siano esadecimali scommentate sotto
	//$dump->dumpDatabaseData(”nomedb”, $filename, 100, False);
}
else {
	//dump della struttura
	$dump->dumpDatabaseStructure(”nomedb”, $filename);
}

//invio il file generato allo standard output
header (’Content-Type: application/octet-stream’);
header(’Content-Disposition: attachment; filename=”‘.$filename.’”‘);
$file=fopen($filename,”r”);
fpassthru($file);
fclose($file);

//elimino il file dal server
unlink($filename);

?>

In questo esempio genero un file backup.sql.gz che, a seconda del parametro t passato alla pagina, contiene o la struttura del database “nomedb”, o i dati.

Download MySQLDump. Downloads: 2033

Un altro esempio di interfaccia alla classe si trova nell’articolo Interfaccia alla classe MySQLDump per il backup, con un altro file già pronto da scaricare per interfacciarsi con la classe.


Se sei interessato a questo post, potresti anche provare a leggere:

    No related posts