le MEMO du WEB développeur
••• PHP •••  Liste des Mémos, astuces et bonnes pratiques

Script de Backup / Sauvegarde de la Base Mysql en PHP

Le script ci dessous permet de faire une sauvegarde compressée de la base de données MySQL dans le répertoire DB_Backup préalablement créé à la racine de votre site.
Le nom du script contient la date de la génération et j'ai rajouté une fonction qui permet d'effacer, après la génération de la sauvegarde, tous les fichiers de sauvegarde vieux de plus de $NbJours jours.

Script de sauvegarde utilisé sur mes sites hébergés chez 1&1.

<?php
$serveur          = "nom_serveur"
$utilisateur      = "nom_user";
$motDePasse       = "mdp";
$base             = "nom_BDD"; 
$dir_backup       = getenv('DOCUMENT_ROOT')."/DB_Backup";

MYSQL_CONNECT($serveur, $utilisateur, $motDePasse) or die ( "<h1>Serveur MySQL non disponible</h1>");
MYSQL_SELECT_DB($base) or die ( "<h1>Base non disponible</h1>");

// Génération du fichier de sauvegarde dans le répertoire $dir_backup
  system(sprintf(
    'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/SauveBD_'.date("d_n_Y_H_i_s").'.sql.gz',
    $serveur,
    $utilisateur,
    $motDePasse,
    $base,
    $dir_backup
  ));

$NbJours = 7;
// Suppression des vieux fichiers de sauvegarde 
   $folder = new DirectoryIterator($dir_backup);
    foreach($folder as $file){ 
       if( ($file->isFile()) && (!$file->isDot()) ) {
          if (time() - $file->getMTime() > $NbJours*24*3600) unlink($file->getPathname());   
       }
    }
?>

Attention, si votre base de données Mysql est trop lourde,  il est plus prudent de créer un fichier de sauvegarde par table.

Script de sauvegarde de la BDD pour bases lourdes

<?php
  $result = MYSQL_QUERY("SHOW TABLES");
  $numrow = MYSQL_NUM_ROWS($result);
  for($i = 0;$i < $numrow;$i++) {
    $table = MYSQL_RESULT($result,$i);
    // echo "Sauvegarde de la table ".$table;
    system(sprintf("mysqldump --opt -h $serveur -u $utilisateur -p\"$motDePasse\" $base $table | gzip > %s/$table.sql.gz",$dir_backup));
  }
?>

 

publié le 19/05/2013 par Memo Web
Commentaire :
un grand merci, cela fonctionne parfaitement !!
par inconnu, le 24/01/2014
Commenter le Mémo :

Tester format de chaîne style mot de passe
Comment récupérer ou supprimer l'extension d'un fichier en PHP ?
La superglobale $_SERVER et ses utilisations
Formulaire de paiement paypal en PHP
Ucfirst ou Convertir la première lettre d'une chaine en majuscule
Formater une chaine en URL
Bonne pratique : Syntaxes du if then else en PHP
Afficher l'année courante sur son site
Fonction extract() en PHP
Fonction PHP qui permet de savoir si un répertoire est vide ou pas
Ajoutez vos propres Mémos sur MEMO-WEB

Il suffit de vous créer un compte sur le site

Vous pourrez choisir un thème parmis l'une des catégories proposées par MEMO-WEB.

Rédigez votre Mémo.
Après validation par MEMO-WEB, il sera mis en ligne.
Ajouter vos Mémos