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 :

Comment formater un grand nombre à l'affichage pour le rendre plus lisible (en PHP)
Formulaire de paiement paypal en PHP
Affectation conditionnelle sous PHP
Enlever les balises HTML d'une chaîne en PHP
Instruction SWITCH
Récupérer l'adresse de la page courante
Affichage tampon en PHP : Output buffering
Une fonction file_put_contents pour PHP4
La superglobale $_SERVER et ses utilisations
Fonction de sécurisation des données passées dans formulaire ou URL
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