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 :

Problème à l'affichage de l'heure en PHP - 2h de moins
Récupérer l'adresse de la page courante
Espaces parasites rajoutés lors d'un envoi de mail
Affichage tampon en PHP : Output buffering
Tester format de chaîne style mot de passe
Lire un fichier .csv et l'enregistrer en base de données Mysql
Enlever des mots avec les expressions régulières
Convertir un format dateTime Français en format MySQL
Division en PHP - Partie entière
Affectation conditionnelle sous PHP
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