Sauvegarde de base de données

Contenu du snippet

voilà un script que j'ai trouvé il y a quelques temps pour sauvegarder ma base mysql. il faut uploader le script sur la racine du ftp et lancer le fichier.
je précise bien que le script n'est pas de moi, je l'avais mis il y a plusieurs mois sur le forum pour aider quelqu'un et il s'est avéré que plusieurs personnes étaient intéressées. je le mets donc avec les sources il servira peut être plus.

Source / Exemple :


voilà le script :

<?php

// indiquer ici le serveur base ("localhost" sur levillage et lycos, 

"sql.free.fr" sur free, etc.)
$host="localhost";

//indiquer ici le nom de votre base (votrelogin_xxxx sur village, votrelogin_db sur lycos, votrelogin sur free)
$base="mabase";

// indiquer ici l'user/utilisateur base (votrelogin_xxxx sur village.org, 

votrelogin sur lycos et free )
$user="root";

// indiquer ici le pass de votre base (pass particulier possible sur levillage, pass du compte sur lycos et free)
$pass="";

//////////////// remplir au moins ci-dessus: server nom login pass de la base 

////////////////////

//Par défaut toutes les tables sont sauvegardées à la racine (là où est ce 

fichier)
// ajoutez entre les guillemets un critere de sélection, d'exclusion, un 

dossier de stockage.
$exclus = ""; // Ne pas sauver les tables dont le nom contient.. ici: 

"_index_" (utile pour Spip)
$prefixe = ""; // Ne sauver que les tables avec ce préfixe ex: 

"spip_"
$dossier = ""; // Dossier de stockage de la sauvegarde ex: 

"ecrire/data/" (utile pour Spip)

// Sauvegarde compressée par défaut. Remplacer true par false pour ne pas 

compresser,
// ou si le serveur fait une erreur car il n'accepte pas la compression gz
$gz = true;

$format = "INSERT"; // utiliser l'instruction SQL INSERT
$insertComplet = true; // INSERT avec les noms des champs (sans: false)

echo "<br><H3>SAUVEGARDE DE VOTRE BASE DE DONNEES</H3>";
echo "<b>Sauvegarde FTP automatique,<br>puis vers votre ordinateur en cliquant 

sur le lien</b><br>";

//CONNEXION
$link = mysql_connect($host, $user, $pass);
mysql_select_db($base) or die("Connexion impossible à la base de donnée 

(vérifiez server nom login pass).");

function ecrire ($texte) {
global $fp, $_fputs;
$_fputs($fp, "$texte\n");
}

//calcul de la date
$temps = time();
$jour = date("j", $temps); //format numerique : 1->31
$annee = date("Y", $temps); //format numerique : 4 chiffres
$mois = date("m", $temps);
$heure = date("H", $temps);
$minutes = date("i", $temps);

//nom du fichier de sauvegarde: sauv_jj_mm_aaaa_nombase .gz si compressé ou 

.sql si non compressé
if ($gz) $ext = ".gz";
else $ext = ".sql";

// pour éviter un éventuel téléchargement par un tiers, remplacez ci-dessous 

"sauv_" par "wcoqp_" ou autre
$nom = $dossier . "sauv_" . $base . "_" . $prefixe . $jour. "_" . $mois. "_" . 

$annee . $ext;
// PS: pas grand chose à voir, les pass sont écrits en crypté...

$date = "$jour/$mois/$annee a $heure" . "h" . $minutes;

//creation et ouverture du fichier
if ($gz) $fp = @gzopen($nom, "wb");
else $fp = fopen($nom, "wb");
if (! $fp) die("impossible de créer $nom."); 
$_fputs = ($gz) ? gzputs : fputs;

//ecriture entete du fichier
ecrire("# sauvegarde de la base $base");
ecrire("# le $date");

// pour chaque table...
$res = mysql_list_tables($base, $link); 
$num_rows = mysql_num_rows($res); 
$i = 0; 
while ($i < $num_rows) 
{ 
$tablename = mysql_tablename($res, $i); 
// éviter les tables avec le préfixe signalé par $prefixe
if (substr($tablename,0,strlen($prefixe)) != $prefixe) { echo 

"<br><font color='pink'>> $tablename NON INCLUS ($prefixe non 

souhaité)</font>";}
else {
// éviter les tables avec mot exclus signalé par $exclus
if (strstr($tablename, $exclus)) {echo "<br><font color='pink'>> 

$tablename NON INCLUS ($exclus non souhaité)</font>";}
else{
// ecrire la structure de la table
echo "<br>$tablename : <font color='blue'> Structure 

OK </font>";
ecrire("# structure de la table $tablename");
ecrire("DROP TABLE IF EXISTS `$tablename`;\n");
// requete de creation de la table 
$query = "SHOW CREATE TABLE $tablename"; 
$resCreate = mysql_query($query); 
$row = mysql_fetch_array($resCreate); 
$schema = $row[1].";"; 
ecrire("$schema\n"); 

// ecrire le contenu de la table 
echo "<font color='green'> Données OK </font>";
ecrire("# donnees de $tablename");
$query = "SELECT * FROM $tablename"; 
$resData = mysql_query($query); 
if (mysql_num_rows($resData) > 0) 
{ 
$sFieldnames = ""; 
if ($insertComplet) 
{ 
$num_fields = 

mysql_num_fields($resData); 
for($j=0; $j < $num_fields; $j++)
{
$sFieldnames .= 

"`".mysql_field_name($resData, $j) ."`";
if ($j<$num_fields-1) $sFieldnames .= 

", ";
}
$sFieldnames = "(" . $sFieldnames . 

")";
} 
$sInsert = "INSERT INTO `$tablename` 

$sFieldnames values "; 

while($rowdata = mysql_fetch_assoc($resData)) 
{ 
$lesDonnees = 

"<guillemet>".implode("<guillemet>,
<guillemet>", $rowdata)."<guillemet>"; 
$lesDonnees = 

str_replace("<guillemet>", "'",
addslashes($lesDonnees)); 

if ($format == "INSERT") $lesDonnees = 

"$sInsert($lesDonnees);"; 
ecrire("$lesDonnees\n"); 
} 
} 
}
$i++;
}
} 

ecrire("# ------- fin ------------");

// fermer le fichier
if ($gz) gzclose($fp);
else fclose($fp);

echo "<br><br><b>Sauvegarde FTP finie !</b><br><br>";
echo "Fichier de sauvegarde : <font color='blue'> $nom </font>(" . 

ceil(filesize("$nom")/1024) . " Ko).";

echo "<br><br><b>Pour le télécharger sur votre ordinateur:</b> <a 

href='$nom'>CLIQUER ICI</a><br><br>";
echo "(N'oubliez pas de supprimer vos anciennes sauvegardes régulièrement)";

?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.