Sauvegarde de base de données

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 658 fois - Téléchargée 29 fois

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

Ajouter un commentaire

Commentaires

hector6603
Messages postés
1
Date d'inscription
mercredi 2 août 2006
Statut
Membre
Dernière intervention
2 août 2006
-
Moi j'adore :), c'est exactement ce que je voulais faire, merci
scoder
Messages postés
140
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
20 mars 2006
-
comme dit plus haut je ne suis pas l'auteur de ce script, je le mets juste ici pensant qu'il sera peut être utile. personnellement j'ai été amené à l'utiliser car le temps d'exécution de la sauvegarde avec php myadmin était trop long, et c'était le premier script opérationnel que j'avais trouvé.
cela dit il est évident qu'il existe d'autres moyens de sauvegarder une BDD, je pense notament au script de Ashe pour ceux qui ont des forums PhpBB et dont les BDD sont trop volumineuses.
apxa
Messages postés
188
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
25 avril 2009
-
Iop,
c'est un bon sujet.

Have Fun ;)
cs_Nox
Messages postés
415
Date d'inscription
mardi 3 avril 2001
Statut
Membre
Dernière intervention
26 avril 2008
-
bien d'accord que mysqldump est plus rapide, mais on fais quoi quand le serveur accepte pas les applications et qu'on veut qd même sauvegarder.... ce script est-il conseillé ou il existe une autre solution ?
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

le script ultra gourmand par excellence... Des requêtes dans une boucle, je donne pas longtemps pour la durée de vie de ton hébergement.

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.