Dump (sauvegarde) avec PHP d'une base de donnée MySQL

Avec ce script vous pouvez faire un dump (une sauvegarde) facilement de votre base de donnée.

Pour le faire il vous suffit de renseigner les paramètres SQL, ensuite de créer un fichier "sauvegarde.sql" au meme niveau que votre script php et ensuite de paramétrer la fonction dump_MySQL.

  • En mettant 1 dans la fonction dump_MySQL vous aurez uniquement les tables
  • En mettant 2 vous aurez les tables et les champs.

  Voir en MySQLi un code identique : Sauvegarde complète d'une base de données MySQL


Information sur les mises à jour

Dernière mise à jour :

13 Sept 2019
fonctionnement du code vérifié

59 305  vues
Compatibilité du code
PHP 4, PHP 5
A savoir

Ces fonctions sont utilisées dans ce code source:
mysql_close()    mysql_connect()    mysql_fetch_array()    mysql_field_type()    mysql_num_fields()    mysql_query()    mysql_select_db()   

Ces extensions étaient obsolètes en PHP 5.5.0, et ont été supprimées en PHP 7.0.0.
à la place, vous pouvez utiliser l'extension MySQLi ou l'extension PDO_MySQL.
Voir aussi MySQL : choisir une API du guide et ces entrées de la FAQ pour plus d'informations.
Alternatives à cette fonction :
mysqli_connect() et PDO::__construct()

  code classé dans   MySQL
  code source classé dans   MySQL
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
                    
<?php
/*------------------------------*/
/*
Titre : Dump (sauvegarde) avec PHP d'une base de donnée MySQL

Auteur : miragoo
Date édition : 28 Oct 2010
Date mise a jour : 13 Sept 2019

Rapport de la maj:
- fonctionnement du code vérifié
*/
/*------------------------------*/

function dump_MySQL($serveur, $login, $password, $base, $mode)
{
$connexion = mysql_connect($serveur, $login, $password);
mysql_select_db($base, $connexion);

$entete = "-- ----------------------\n";
$entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\n";
$entete .= "-- ----------------------\n\n\n";
$creations = "";
$insertions = "\n\n";

$listeTables = mysql_query("show tables", $connexion);
while($table = mysql_fetch_array($listeTables))
{
// structure ou la totalité de la BDD
if($mode == 1 || $mode == 2)
{
$creations .= "-- -----------------------------\n";
$creations .= "-- Structure de la table ".$table[0]."\n";
$creations .= "-- -----------------------------\n";
$listeCreationsTables = mysql_query("show create table ".$table[0],
$connexion);
while($creationTable = mysql_fetch_array($listeCreationsTables))
{
$creations .= $creationTable[1].";\n\n";
}
}
// données ou la totalité
if($mode > 1)
{
$donnees = mysql_query("SELECT * FROM ".$table[0]);
$insertions .= "-- -----------------------------\n";
$insertions .= "-- Contenu de la table ".$table[0]."\n";
$insertions .= "-- -----------------------------\n";
while($nuplet = mysql_fetch_array($donnees))
{
$insertions .= "INSERT INTO ".$table[0]." VALUES(";
for($i=0; $i < mysql_num_fields($donnees); $i++)
{
if($i != 0)
$insertions .= ", ";
if(mysql_field_type($donnees, $i) == "string" ||
mysql_field_type($donnees, $i) == "blob")
$insertions .= "'";
$insertions .= addslashes($nuplet[$i]);
if(mysql_field_type($donnees, $i) == "string" ||
mysql_field_type($donnees, $i) == "blob")
$insertions .= "'";
}
$insertions .= ");\n";
}
$insertions .= "\n";
}
}

mysql_close($connexion);

$fichierDump = fopen("sauvegarde.sql", "wb");
fwrite($fichierDump, $entete);
fwrite($fichierDump, $creations);
fwrite($fichierDump, $insertions);
fclose($fichierDump);

echo "Sauvegarde terminée";
}
?>
<?php
/*------------------------------*/
/*
Titre : Dump (sauvegarde) avec PHP d'une base de donnée MySQL

Auteur : miragoo
Date édition : 28 Oct 2010
Date mise a jour : 13 Sept 2019

Rapport de la maj:
- fonctionnement du code vérifié
*/
/*------------------------------*/

function dump_MySQL($serveur, $login, $password, $base, $mode)
{
$connexion = mysql_connect($serveur, $login, $password);
mysql_select_db($base, $connexion);

$entete = "-- ----------------------\n";
$entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\n";
$entete .= "-- ----------------------\n\n\n";
$creations = "";
$insertions = "\n\n";

$listeTables = mysql_query("show tables", $connexion);
while($table = mysql_fetch_array($listeTables))
{
// structure ou la totalité de la BDD
if($mode == 1 || $mode == 2)
{
$creations .= "-- -----------------------------\n";
$creations .= "-- Structure de la table ".$table[0]."\n";
$creations .= "-- -----------------------------\n";
$listeCreationsTables = mysql_query("show create table ".$table[0],
$connexion);
while($creationTable = mysql_fetch_array($listeCreationsTables))
{
$creations .= $creationTable[1].";\n\n";
}
}
// données ou la totalité
if($mode > 1)
{
$donnees = mysql_query("SELECT * FROM ".$table[0]);
$insertions .= "-- -----------------------------\n";
$insertions .= "-- Contenu de la table ".$table[0]."\n";
$insertions .= "-- -----------------------------\n";
while($nuplet = mysql_fetch_array($donnees))
{
$insertions .= "INSERT INTO ".$table[0]." VALUES(";
for($i=0; $i < mysql_num_fields($donnees); $i++)
{
if($i != 0)
$insertions .= ", ";
if(mysql_field_type($donnees, $i) == "string" ||
mysql_field_type($donnees, $i) == "blob")
$insertions .= "'";
$insertions .= addslashes($nuplet[$i]);
if(mysql_field_type($donnees, $i) == "string" ||
mysql_field_type($donnees, $i) == "blob")
$insertions .= "'";
}
$insertions .= ");\n";
}
$insertions .= "\n";
}
}

mysql_close($connexion);

$fichierDump = fopen("sauvegarde.sql", "wb");
fwrite($fichierDump, $entete);
fwrite($fichierDump, $creations);
fwrite($fichierDump, $insertions);
fclose($fichierDump);

echo "Sauvegarde terminée";
}
?>

Exemple :

 
01
02
03
04
                    
<?php

dump_MySQL("127.0.0.1", "root", "", "ma_base", 2);
?>
<?php

dump_MySQL("127.0.0.1", "root", "", "ma_base", 2);
?>

      Fonctions du code - Doc officielle PHP

   php.net  
Description
Versions PHP
    addslashes
Ajoute des antislashs dans une chaîne
PHP 4, 5, 7 et 8
    date
Formate un horodatage Unix
PHP 4, 5, 7 et 8
    echo
Affiche une chaîne de caractères
PHP 4, 5, 7 et 8
    fclose
Ferme un fichier
PHP 4, 5, 7 et 8
    fopen
Ouvre un fichier ou une URL
PHP 4, 5, 7 et 8
    fwrite
Écrit un fichier en mode binaire
PHP 4, 5, 7 et 8
    mysql_close Ferme la connexion MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_connect Ouvre une connexion à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_fetch_array Retourne une ligne de résultat MySQL sous la forme d'un tableau - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_field_type Retourne le type d'une colonne MySQL spécifique - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_num_fields Retourne le nombre de champs d'un résultat MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_query Envoie une requête à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_select_db Sélectionne une base de données MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0

[5]

  • avatar

    Invité

    20 Mars 2021 à 19:08

    merci bq :) :) :) ................

  • avatar

    Invité

    28 Mars 2012 à 00:12

    Bonjour,
    J'ai un problème avec ce code, les accents ne s'affiche pas dans le fichier obtebu, erreur encodage utf8

  • avatar

    Berfonta

    24 Avril 2011 à 10:02

    C'est tellement sympa que je n'hésite pas à rajouter 3 remarques :
    - Rapidité : l'entrée des données une à une prend beaucoup de temps. Avec 1 seule requête par table, on va 10 fois plus vite.
    - Contraintes : l'ordre alphabétique ne convient pas aux tables avec clés externes, sauf si on bloque le contrôle provisoirement :
    SET FOREIGN_KEY_CHECKS = 0; ... puis = 1 à la fin.
    - Ràz auto : l'importation, dans PhpMyAdmin par exemple, nécessite de détruire les tables avant. Ils préfèrent laisser ce risque à l'utilisateur... On peut rajouter une autre requête, unique aussi, pour les 'dropper' au début.
    On peut ainsi préparer une chaîne $drop que l'on remplit à chaque nom de table disponible et qui sera insérée en tête du fichier.
    Bien entendu avant d'utiliser ce programme, il faut toujours sauvegarder la base actuelle avant.
    J'obtiens le fichier suivant en ajoutant la remarque de Benicode et en simplifiant un poil.

    Tests avec : WampServer 2.1 / PhpMyAdmin 3.3.9  / Apache 2.2.17 / MySql 5.5.8 / PHP 5.3.5

    function isNeededQuotes($type) {
        return( $type == "string" || $type == "blob" || $type == "datetime" ||
                $type == "date" || $type == "timestamp" || $type == "time" || $type == "year");
    }
    function dump_MySQL($serveur, $login, $password, $base, $fichier, $mode) {
        $connexion = mysql_connect($serveur, $login, $password);
        mysql_select_db($base, $connexion);
        $drops = "-- dump de la base ".$base." au ".date("d-M-Y")."\n";                    // Première ligne
        $creations = $insertions = "";                                                        // SET : pour introduction désordonnée des tables :
        $deb_drop = "\nSET FOREIGN_KEY_CHECKS = 0;\n\nDROP TABLE IF EXISTS\n  `";        // effacement des tables
        $listeTables = mysql_query("show tables", $connexion);      // var_dump($listeTables);
        while($table = mysql_fetch_array($listeTables))
        {
            if($mode == 1 || $mode == 2)    // structure ou la totalité de la BDD
            {
                $listeCreationsTables = mysql_query("show create table ".$table[0], $connexion);
                $drops .= $deb_drop.$table[0]; $deb_drop = "`,\n  `";                    // Suppression de la table
                while($creationTable = mysql_fetch_array($listeCreationsTables))
                    $creations .= $creationTable[1].";\n\n";
            }
            if($mode > 1)                    // données ou la totalité
            {
                if($donnees = mysql_query("SELECT * FROM ".$table[0])) {
                    $insertions .= "INSERT INTO `".$table[0]."` VALUES\n";    // 1 seule requête par table vitesse x 10
                    $nuplet = mysql_fetch_array($donnees);
                    while($nuplet) {                // toutes les données vont suivre 'encadrées' si nécessaire :
                        $insertions .= "(";
                        for($i=0; $i < mysql_num_fields($donnees); $i++) {
                            if($i > 0) $insertions .=  ", ";
                            $quote = isNeededQuotes(mysql_field_type($donnees, $i)) ? "'" : "";
                            $insertions .= $quote.addslashes($nuplet[$i]).$quote; }                 // et hop ! c emballé
                        if($nuplet = mysql_fetch_array($donnees)) $insertions .=  "),\n"; }    // , : ce n'est pas fini :
                    $insertions .= ");\n\n"; }                                                                                    // ; : final
            }
        }
        mysql_close($connexion);
        $drops .= "`;\n\n";
        $insertions .= "SET FOREIGN_KEY_CHECKS = 1;\n\n";        // !! Ne pas l'oublier à la fin !!
        $fichierDump = fopen($fichier, "wb");
        fwrite($fichierDump, $drops);
        fwrite($fichierDump, $creations);
        fwrite($fichierDump, $insertions);
        fclose($fichierDump);

        echo "Sauvegarde de ".$fichier." terminée";
    }     dump_MySQL("localhost", "root", "mot_pass", "ma_base", "dump.sql", 2);

  • avatar

    Benicode

    10 Nov 2010 à 01:10

    Hi, Ton Code est sympa MAIS ATTENTION pour les quotes sur les types de date genre "datetime" ou autres cela ne fonctionne PAS... J'ai modifié un poil ton code pour qu'il fonctionne aussi pour ces cas là : function isNeededToInsertQuotes($typeOfdata){
     return (    $typeOfdata == "string"
        || $typeOfdata == "blob"
        || $typeOfdata == "datetime"
       || $typeOfdata == "date"
       || $typeOfdata == "timestamp"
       || $typeOfdata == "time"
       || $typeOfdata == "year"
      );
    }
    function dump_MySQL($serveur, $login, $password, $base, $mode)
    {
        $connexion = mysql_connect($serveur, $login, $password);
        mysql_select_db($base, $connexion);
       
        $entete  = "-- ----------------------\n";
        $entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\n";
        $entete .= "-- ----------------------\n\n\n";
        $creations = "";
        $insertions = "\n\n";
       
        $listeTables = mysql_query("show tables", $connexion);
        while($table = mysql_fetch_array($listeTables))
        {
            // structure ou la totalité de la BDD
            if($mode == 1 || $mode == 2)
            {
                $creations .= "-- -----------------------------\n";
                $creations .= "-- Structure de la table ".$table[0]."\n";
                $creations .= "-- -----------------------------\n";
                $listeCreationsTables = mysql_query("show create table ".$table[0],
    $connexion);
                while($creationTable = mysql_fetch_array($listeCreationsTables))
                {
                  $creations .= $creationTable[1].";\n\n";
                }
            }
            // données ou la totalité
            if($mode > 1)
            {
                $donnees = mysql_query("SELECT * FROM ".$table[0]);
                $insertions .= "-- -----------------------------\n";
                $insertions .= "-- Contenu de la table ".$table[0]."\n";
                $insertions .= "-- -----------------------------\n";
                while($nuplet = mysql_fetch_array($donnees))
                {
                    $insertions .= "INSERT INTO ".$table[0]." VALUES(";
                    for($i=0; $i < mysql_num_fields($donnees); $i++)
                    {
                      if($i != 0)
                         $insertions .=  ", ";
          $typeOfdata = mysql_field_type($donnees, $i);
          $bInsertQuotes = isNeededToInsertQuotes($typeOfdata);
                      if($bInsertQuotes)
                         $insertions .=  "'";
                      $insertions .= addslashes($nuplet[$i]);
                      if($bInsertQuotes)
                        $insertions .=  "'";
                    }
                    $insertions .=  ");\n";
                }
                $insertions .= "\n";
            }
        }
     
        mysql_close($connexion);
     
        $fichierDump = fopen("sauvegarde.sql", "wb");
        fwrite($fichierDump, $entete);
        fwrite($fichierDump, $creations);
        fwrite($fichierDump, $insertions);
        fclose($fichierDump);
        echo "Sauvegarde terminée";
    }

  • avatar

    Smed79

    04 Nov 2010 à 02:27

    J'ai testé le code, ça fonction à merveille !!! Encore Merci à toi...



 Autres snippets qui pourraient vous intéresser

Stock les cookies dans une base de données MySQL

Compatibilité : PHP 7, PHP 8

Stock les cookies dans une base de données MySQL. Pratique pour séescuriser les cookies de vos utilisateurs

Sauvegarde complète en MySQLi d'une base de données SQL

Compatibilité : PHP 7, PHP 8

Dump (sauvegarde) avec PHP d'une base de données MySQL - Cela inclus les tables et les enregistrements.

* Requêtes exécutées avec Recherche Contextuelle

  Les derniers scripts PHP / MySQL

Serendipity 2.6.0

logo Serendipity
Langue langue fr
Date  aujourd'hui
Taille 15 Mo
Catégorie Blogs

Drupal 11.3.6

logo Drupal
Langue langue us
Date  aujourd'hui
Taille 34 Mo
Catégorie CMS

TYPO3 14.2.0

logo TYPO3
Langue langue fr
Date  hier
Taille 38 Mo
Catégorie CMS

Dolibarr ERP 23.0.1

logo Dolibarr ERP
Langue langue fr
Date 09 Avril 2026
Taille 89 Mo
Catégorie Logiciels

ZwiiCampus 3.7.00

logo ZwiiCampus
Langue langue fr
Date 09 Avril 2026
Taille 11 Mo
Catégorie Administration

Craft CMS 5.9.19

logo Craft CMS
Langue langue fr
Date 08 Avril 2026
Taille 31 Mo
Catégorie CMS
avatar

Miragoo

  28 Oct 2010

  SOURCE   Télécharger

Information sur les mises à jour

Dernière mise à jour :

13 Sept 2019
fonctionnement du code vérifié

59 305 Vues
Compatibilité du code
PHP 4, PHP 5