Sauvegarder/Exporter une base de données avec PHP
Posté par jbj le 4 sept 2007 dans PHP • 19 commentairesMême si vous avez installé PhpMyAdmin sur votre serveur, il peut être utile de créer une fonction automatisant la sauvegarde de votre base de données.
Cette fonction retournera une variable contenant un dump de votre base, libre à vous de l'enregistrer sur un fichier, de l'enregistrer dans un répertoire protégé ou encore de vous l'envoyer par mail...
Note essentiellement destinée aux débutants:
Prenez garde au fait qu'une sauvegarde d'une base de données est une donnée extrêmement sensible, même si les mot de passes sont cryptés. Par conséquent, il ne faut jamais enregistrer ce fichier hors d'un répertoire protégé par mot de passe.
function dump()
{
//Connexion à la base
$db = mysql_connect('localhost', 'login', 'mdp');
mysql_select_db('nom_de_la_base',$db);
$tables = mysql_list_tables('nom_de_la_base', $db);
while ($donnees = mysql_fetch_array($tables))
{
$table = $donnees[0];
$res = mysql_query('SHOW CREATE TABLE '.$table);
if ($res)
{
$insertions = '';
$tableau = mysql_fetch_array($res);
$tableau[1] .= ';';
$dumpsql[] = str_replace("\n", '', $tableau[1]);
$req_table = mysql_query('SELECT * FROM '.$table);
$nbr_champs = mysql_num_fields($req_table);
while ($ligne = mysql_fetch_array($req_table))
{
$insertions .= 'INSERT INTO '.$table.' VALUES (';
for ($i=0; $i<$nbr_champs; $i++)
{
$insertions .= '\'' . mysql_real_escape_string($ligne[$i]) . '\', ';
}
$insertions = substr($insertions, 0, -2);
$insertions .= ");\n";
}
if ($insertions != '') $dumpsql[] = $insertions;
}
}
return implode("\n", $dumpsql);
}
Autres articles dans la catégorie PHP
- Traiter les emails avec php
- Faire du email piping avec PHP et CPanel
- Présentation de l’interface Iterator de PHP
- Manipulation de répertoires en php avec la SPL
- Géolocalisation IP avec PHP et WordPress
- script php de sauvegarde mysql
- Monitoring de site avec alerte mail et SMS
- Communiquer entre serveurs par requêtes xml
- Une classe php complète pour la détection du navigateur
- 6 fonctions PHP indispensables








Sauvegarder/Exporter une base de donnes avec PHP…
Mme si vous avez install PhpMyAdmin sur votre serveur, il peut tre utile de crer une fonction automatisant la sauvegarde de votre base de donnes.
Cette fonction retournera une variable contenant un dump de votre base, libre vous de lenregistrer sur u…
Bonjour,
L’idée est bonne mais la fonction ne marche pas.
Il manque un $ devant db dans « db = mysql_connect(‘localhost’, ‘root’, »); » ; il y a aussi une } de trop à la fin mais de toute façon, même en corrigeant ça ça ne fonctionne pas, dommage.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/qsdfgdh/www/0.php on line 9
Warning: implode() [function.implode]: Bad arguments. in /home/qsdfgdh/www/0.php on line 39
Oulà, en effet oui il manque le $ devant db. Merci pour ta vigilance.
Par contre pour le reste, je ne comprends pas trop dans la mesure ou j’utilise cette fonction sur un de mes sites sans jamais avoir eu aucun problème. Je regarderais plus en detail et te tiendrais au courant.
OK.
Ensuite, il faudrait développer un peu pour faire une page toute prête.
Je pense l’utiliser sous forme de formulaire dans lequel on choisi le dossier dans lequel on souhaite l’enregistrer et/ou l’adresse mail à laquelle on souhaite l’envoyer et là le script serait parfait et facilement intégrable dans une admin de site.
perso, j’insere le dump dans un textarea que je copie-colle dans un fichier texte. J’avais envie de créer directement le fichier avec un téléchargement forcé, mais je ne l’ai jamais fait par manque de temps, malheureusement.
Je regarde demain pour le problème que tu as rencontré. Tiens moi au courant si tu fais des améliorations de ton coté
Je viens de re-tester la fonction et elle marche impec sur mon serveur…Je ne vois pas trop ce qui peut clocher chez toi…
C’est parce que je tente de faire afficher le résultat de la fonction en supprimant la fonction et en ne gardant que le contenu de la fonction pour qu’il s’exécute directement. J’enlève donc function dump() { et la dernière accolade fermante tout à la fin }. Je pensais pouvoir ainsi visualiser le résultat et voir comment le traiter pour l’enregistrer et le mettre en pièce jointe d’un mail. Visiblement, ça ne fonctionne pas et j’ai les erreurs mentionnées précédemment qui s’affichent.
Peux-tu m’indiquer la marche à suivre pour voir le résultat de ta fonction ?
Je fais comme ça pour l’afficher dans un textarea:
J’espère que ça t’ira
Copie exacte et intégrale du code de ma page de test (sauf les codes bien sûr)
‘.$dump. »;
?>
Résultat :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/creation/www/3.php on line 8
Warning: implode() [function.implode]: Bad arguments. in /home/creation/www/3.php on line 38
et le textarea en dessous
Je pige pas…
Bon…j’ai voulu tester le bbcode dans mon message précédent mais ça n’a pas marché…tu peux le supprimer si tu veux.
En tout cas, j’ai exactement le code que tu donnes et rien n’y fait.
Bizarre. Vu qu’apparemment c’est la fonction implode qui pose un problème, tu devrais essayer de la supprimmer et récupérer l’array, que tu afficherais encuite avec print_r, et voir ce que ça donne.
Bonjour, j’ai essayé d’utilisé la fonction dump() que tu proposes, mais sans résultat. J’ai donc modifié cette fonction qui maintenant marche correctement. J’ai également rajouté une fonction qui enregistre directement la sauvegarde de la BD sur l’odinateur et pas sur le serveur.
« , » »,$str);
$str=str_replace( » « , » »,$str);
$str=str_replace(« ¡ », »¡ »,$str);
$str=str_replace(« ¢ », »¢ »,$str);
$str=str_replace(« £ », »£ »,$str);
$str=str_replace(« ¤ », »¤ »,$str);
$str=str_replace(« ¥ », »¥ »,$str);
$str=str_replace(« ¦ », »¦ »,$str);
$str=str_replace(« § », »§ »,$str);
$str=str_replace(« ¨ », »¨ »,$str);
$str=str_replace(« © », »© »,$str);
$str=str_replace(« ª », »ª »,$str);
$str=str_replace(« « », »« »,$str);
$str=str_replace(« ¬ », »¬ »,$str);
$str=str_replace(« », » »,$str);
$str=str_replace(« ® », »® »,$str);
$str=str_replace(« ¯ », »¯ »,$str);
$str=str_replace(« ° », »° »,$str);
$str=str_replace(« ± », »± »,$str);
$str=str_replace(« ² », »² »,$str);
$str=str_replace(« ³ », »³ »,$str);
$str=str_replace(« ´ », »´ »,$str);
$str=str_replace(« µ », »µ »,$str);
$str=str_replace(« ¶ », »¶ »,$str);
$str=str_replace(« · », »· »,$str);
$str=str_replace(« ¸ », »¸ »,$str);
$str=str_replace(« ¹ », »¹ »,$str);
$str=str_replace(« º », »º »,$str);
$str=str_replace(« » », »» »,$str);
$str=str_replace(« ¼ », »¼ »,$str);
$str=str_replace(« ½ », »½ »,$str);
$str=str_replace(« ¾ », »¾ »,$str);
$str=str_replace(« ¿ », »¿ »,$str);
$str=str_replace(« À », »À »,$str);
$str=str_replace(« Á », »Á »,$str);
$str=str_replace(«  », »Â »,$str);
$str=str_replace(« à », »Ã »,$str);
$str=str_replace(« Ä », »Ä »,$str);
$str=str_replace(« Å », »Å »,$str);
$str=str_replace(« Æ », »Æ »,$str);
$str=str_replace(« Ç », »Ç »,$str);
$str=str_replace(« È », »È »,$str);
$str=str_replace(« É », »É »,$str);
$str=str_replace(« Ê », »Ê »,$str);
$str=str_replace(« Ë », »Ë »,$str);
$str=str_replace(« Ì », »Ì »,$str);
$str=str_replace(« Í », »Í »,$str);
$str=str_replace(« Î », »Î »,$str);
$str=str_replace(« Ï », »Ï »,$str);
$str=str_replace(« Ð », »Ð »,$str);
$str=str_replace(« Ñ », »Ñ »,$str);
$str=str_replace(« Ò », »Ò »,$str);
$str=str_replace(« Ó », »Ó »,$str);
$str=str_replace(« Ô », »Ô »,$str);
$str=str_replace(« Õ », »Õ »,$str);
$str=str_replace(« Ö », »Ö »,$str);
$str=str_replace(« × », »× »,$str);
$str=str_replace(« Ø », »Ø »,$str);
$str=str_replace(« Ù », »Ù »,$str);
$str=str_replace(« Ú », »Ú »,$str);
$str=str_replace(« Û », »Û »,$str);
$str=str_replace(« Ü », »Ü »,$str);
$str=str_replace(« Ý », »Ý »,$str);
$str=str_replace(« Þ », »Þ »,$str);
$str=str_replace(« ß », »ß »,$str);
$str=str_replace(« à », »à »,$str);
$str=str_replace(« á », »á »,$str);
$str=str_replace(« â », »â »,$str);
$str=str_replace(« ã », »ã »,$str);
$str=str_replace(« ä », »ä »,$str);
$str=str_replace(« å », »å »,$str);
$str=str_replace(« æ », »æ »,$str);
$str=str_replace(« ç », »ç »,$str);
$str=str_replace(« è », »è »,$str);
$str=str_replace(« é », »é »,$str);
$str=str_replace(« ê », »ê »,$str);
$str=str_replace(« ë », »ë »,$str);
$str=str_replace(« ì », »ì »,$str);
$str=str_replace(« í », »í »,$str);
$str=str_replace(« î », »î »,$str);
$str=str_replace(« ï », »ï »,$str);
$str=str_replace(« ð », »ð »,$str);
$str=str_replace(« ñ », »ñ »,$str);
$str=str_replace(« ò », »ò »,$str);
$str=str_replace(« ó », »ó »,$str);
$str=str_replace(« ô », »ô »,$str);
$str=str_replace(« õ », »õ »,$str);
$str=str_replace(« ö », »ö »,$str);
$str=str_replace(« ÷ », »÷ »,$str);
$str=str_replace(« ø », »ø »,$str);
$str=str_replace(« ù », »ù »,$str);
$str=str_replace(« ú », »ú »,$str);
$str=str_replace(« û », »û »,$str);
$str=str_replace(« ü », »ü »,$str);
$str=str_replace(« ý », »ý »,$str);
$str=str_replace(« þ », »þ »,$str);
$str=str_replace(« ÿ », »ÿ »,$str);
return $str;
}
function dump()
{
include(« parameters.php »); //mes variables globales sont dans ce fichier
include(« connection.php »); // c’est le fichier pour se connecter à la base de données
// A cette étape, on est donc connecté à la BD
$months=array(« Janvier », »Février », »Mars », »Avril », »Mai », »Juin », »Juillet », »Août », »Septembre », »Octobre », »Novembre », »Décembre »);
$jour=array(« Dimanche », »Lundi », »Mardi », »Mercredi », »Jeudi », »Vendredi », »Samedi »);
$dumpsql[] = « – phpMyAdmin SQL Dump »;
$dumpsql[] = « – version 2.7.0-pl1″;
$dumpsql[] = « – http://www.phpmyadmin.net« ;
$dumpsql[] = « – « ;
$dumpsql[] = « – Serveur: 10.0.5.163″;
$dat= »– Généré le : « .$jour[date("w")]. » « .date(« d »). » « .$months[date("n")-1]. » « .date(« Y »). » à « .date(« G »). »: ».date(« i »);
$dumpsql[] = $dat;
$dumpsql[] = « – Version du serveur: 4.99.99″;
$dumpsql[] = « – Version de PHP: 4.4.1″;
$dumpsql[] = « – « ;
$dumpsql[] = « – Base de données: `$dbName` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$dumpsql[] = « – ——————————————————– »;
$tables = mysql_query(« SHOW TABLES »,$db);
while ($donnees = mysql_fetch_array($tables))
{
$table = $donnees[0];
$dumpsql[] = « »;
$dumpsql[] = « – « ;
$dumpsql[] = « – Structure de la table `$table` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$res = mysql_query(« SHOW CREATE TABLE $table »);
if ($res)
{
$insertions = « »;
$tableau = mysql_fetch_array($res);
$tableau[1] .= « ; »;
$dumpsql[] = $tableau[1];
$dumpsql[] = « »;
$dumpsql[] = « – « ;
$dumpsql[] = « – Contenu de la table `$table` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$req_table = mysql_query(« SELECT * FROM $table »);
$nbr_champs = mysql_num_fields($req_table);
while ($ligne = mysql_fetch_array($req_table))
{
$insertions .= « INSERT INTO `$table` VALUES (« ;
for ($i=0; $i
pardon, en copiant, le début n’a pas été sélectionné.
function dump()
{
include(« parameters.php »); //mes variables globales sont dans ce fichier
include(« connection.php »); // c’est le fichier pour se connecter à la base de données
// A cette étape, on est donc connecté à la BD
$months=array(« Janvier », »Février », »Mars », »Avril », »Mai », »Juin », »Juillet », »Août », »Septembre », »Octobre », »Novembre », »Décembre »);
$jour=array(« Dimanche », »Lundi », »Mardi », »Mercredi », »Jeudi », »Vendredi », »Samedi »);
$dumpsql[] = « – phpMyAdmin SQL Dump »;
$dumpsql[] = « – version 2.7.0-pl1″;
$dumpsql[] = « – http://www.phpmyadmin.net« ;
$dumpsql[] = « – « ;
$dumpsql[] = « – Serveur: 10.0.5.163″;
$dat= »– Généré le : « .$jour[date("w")]. » « .date(« d »). » « .$months[date("n")-1]. » « .date(« Y »). » à « .date(« G »). »: ».date(« i »);
$dumpsql[] = $dat;
$dumpsql[] = « – Version du serveur: 4.99.99″;
$dumpsql[] = « – Version de PHP: 4.4.1″;
$dumpsql[] = « – « ;
$dumpsql[] = « – Base de données: `$dbName` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$dumpsql[] = « – ——————————————————– »;
$tables = mysql_query(« SHOW TABLES »,$db);
while ($donnees = mysql_fetch_array($tables))
{
$table = $donnees[0];
$dumpsql[] = « »;
$dumpsql[] = « – « ;
$dumpsql[] = « – Structure de la table `$table` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$res = mysql_query(« SHOW CREATE TABLE $table »);
if ($res)
{
$insertions = « »;
$tableau = mysql_fetch_array($res);
$tableau[1] .= « ; »;
$dumpsql[] = $tableau[1];
$dumpsql[] = « »;
$dumpsql[] = « – « ;
$dumpsql[] = « – Contenu de la table `$table` »;
$dumpsql[] = « – « ;
$dumpsql[] = « »;
$req_table = mysql_query(« SELECT * FROM $table »);
$nbr_champs = mysql_num_fields($req_table);
while ($ligne = mysql_fetch_array($req_table))
{
$insertions .= « INSERT INTO `$table` VALUES (« ;
for ($i=0; $i
2 erreurs majeurs !
Les guillemets ne sont pas correctes, surement due à cette page internet, il faut faire CTRL+H pour remplacer tous les guillemets…
Ensuite :
$dumpsql[] = str_replace(”n”, “”, $tableau[1]);
C’est surement pas les « n » qu’on veut supprimer ! mais les retours à la ligne non ? ==> \n
Ce qui n’est pas pareil !
Bien moi j ai testé le code et hormis la fermeture, sans oublier de remplacer 2x le champ ‘nom_de_la_base’… meme pour tester avec te lextarea sur du php 5xx…
ca roule Raoul!
Merci… cest un code qui a un potentiel….
je parlais du premier code bien sur, celui de JBJ
//pour finir l’enregistrement apres la derniere ligne…
return implode(« \r\n », $dumpsql);
}
$dump = dump(); //Tu récupere le résultat de la fonction dump()
// on continue…!
$backup_file = ‘backup_’nom_de_la_base’ . date(‘YmdHis’) . ‘.sql’;
$fp = fopen($backup_file, ‘w’);
fwrite($fp, $dump);
fclose($fp);
Bonjour,
Comment faire pour effectuer l’opération sur uniquement une seule table ?
Merci d’avance