Dumb d'une base mySQL en PHP

Ce script permet de réaliser le dump de l'ensemble d'une base mySQL.

Fonction PHP

                                            
                                                <?php
                                                
                                                /*==================================================================
                                                   Dump de la base de données
                                                ==================================================================*/
                                                function dump($params = null) {
                                                    // Initialisation des variables par défaut
                                                    $bkpDate     = date("Y-m-d");
                                                    $bkpDateText = date("d/m/Y");
                                                    $skip        = 0
                                                    $server      = null;
                                                    $database    = null;
                                                    $user        = "root";
                                                    $password    = null;
                                                    $bkpDir      = "./backup";
                                                    
                                                    // Récupération des arguments
                                                    if (isset($params)) {
                                                        while (list($key,$value) = each($params))
                                                            $$key = stripslashes($value);
                                                    } else {
                                                        // Erreur : pas d'arguments
                                                        return 1;
                                                    }
                            
                                                    // Connexion à la base de données
                                                    if (!$db = mysql_connect($server, $user, $password)) return 2;
                                                    if (!mysql_select_db($database, $db)) return 3;
                                                    
                                                    // Récupère la liste des tables
                                                    $sql = "SHOW TABLES FROM ". $database;
                                                    if (!$tables = mysql_query($sql)) return 4;
                                                    
                                                    // Saute les $skip premières tables
                                                    for ($i=0; $i<$skip; $i++) (
                                                        $dbTables = mysql_fetch_array($tables));
                                                    }
                                                    
                                                    // Création du répertoire de sauvegarde si nécessaire
                                                    if (!is_dir($bkpDir . $bkpDate))	mkdir($bkpDir . $bkpDate, 0700);
                                                    
                                                    // Boucle sur toutes les tables
                                                    while ($dbTables = mysql_fetch_array($tables)) {
                                                        // CREATE TABLE (structure de la table)
                                                        $table = $dbTables[0];
                                                        $sql = "SHOW CREATE TABLE ". $table;
                                                        if (!$res = mysql_query($sql)) return 5;
                                                        if ($res) {
                                                            $bkFile = $bkpDir . $bkpDate . "/" . $bkpDate . "_backup_" . $table . ".sql";
                                                            $fp = fopen($bkFile, 'w');
                                                            
                                                            $header = "--\n";
                                                            $header .= "-- Serveur : " . $_SERVER['SERVER_SOFTWARE'] . "\n";
                                                            $header .= "-- Serveur d'exécution : " . $_SERVER['SERVER_NAME'] . "\n";
                                                            $header .= "-- Document root : " . $_SERVER['DOCUMENT_ROOT'] . "\n";
                                                            $header .= "-- Admin : " . $_SERVER['SERVER_ADMIN'] . "\n";
                                                            $header .= "--\n";
                                                            $header .= "-- Serveur MySQL : " . $server . "\n";
                                                            $header .= "--\n";
                                                            $header .= "-- Version de PHP : " . phpversion() . "\n";
                                                            $header .= "--\n";
                                                            $header .= "\n";
                                                            $header .= "-- ------------------------------------------\n";
                                                            $header .= "-- Généré le : " . date("d/m/Y") . " à " . date("H:i:s") . "\n";
                                                            $header .= "-- ------------------------------------------\n";
                                                            $header .= "--\n";
                                                            $header .= "-- Base de données : `" . $database . "`\n";
                                                            $header .= "--\n";
                                                            $header .= "-- ------------------------------------------\n";
                                                            $header .= "\n";
                                                            $header .= "--\n";
                                                            $header .= "-- Structure de la table `" . $table . "`\n";
                                                            $header .= "--\n";
                                                            $header .= "\n";
                                                            fwrite($fp, $header);
                                                            
                                                            // Create table ...
                                                            $array = mysql_fetch_array($res);
                                                            $array[1] .= ";\n";
                                                            $sqlInsert = $array[1] . "\n";
                                                            fwrite($fp, $sqlInsert);
                                                            
                                                            // Insert into ...
                                                            $header = "\n";
                                                            $header .= "--\n";
                                                            $header .= "-- Contenu de la table `" . $table . "`\n";
                                                            $header .= "--\n";
                                                            $header .= "\n";
                                                            fwrite($fp, $header);
                                                            
                                                            if (!$reqTable = mysql_query("SELECT * FROM ". $table)) return 6;
                                                            $nbrFields = mysql_num_fields($reqTable);
                                                            while ($row = mysql_fetch_array($reqTable)) {
                                                                $sqlInsert = "INSERT INTO ". $table ." VALUES (";
                                                                for ($i=0; $i<$nbrFields; $i++) {
                                                                    $sqlInsert .= "\'" . mysql_real_escape_string($row[$i]) . "\', ";
                                                                }
                                                                $sqlInsert = substr($sqlInsert, 0, -2);
                                                                $sqlInsert .= ");\n";
                                                                fwrite($fp, $sqlInsert);
                                                            }
                                                        }
                                                        mysql_free_result($res);
                                                        
                                                        $header = "\n";
                                                        $header .= "-- ------------------------------------------\n";
                                                        $header .= "-- Finalisé le : " . date("d/m/Y") . " à " . date("H:i:s") . "\n";
                                                        $header .= "-- ------------------------------------------\n";
                                                        $header .= "\n";
                                                        fwrite($fp, $header);
                                                
                                                        fclose($fp);
                                                    }
                                                    
                                                    return 0;
                                                }
                                                
                                                ?>
                                            
                                        

Usage

La fonction dump( array ) doit être appelée avec un tableau de paramètres :

  • server : le nom du serveur ; par défaut, "localhost"
  • database : le nom de la base de données
  • user : le login de connexion à la base ; par défaut, "root"
  • password : le mot de passe de connexion à la base
  • bkpDir : le répertoire de sauvegarde ; par défaut, "./backup/"
  • skip : le nombre de premières tables à nepas sauvegarder

                                            
                                                <?php
                                                
                                                $dumpParams = array(
                                                    "server"      => "localhost",
                                                    "database"    => "myDatabase",
                                                    "user"        => "grantedUser",
                                                    "password"    => "password",
                                                    "bkpDir"      => "./backup/",
                                                    "skip"        => 0
                                                );
                                                
                                                if (!$result = dump($dumpParams)) 
                                                    echo "Erreur ". $result;
                                                
                                                ?>