Digital Dynamics
L'informatique innovante et abordable

Dernière mise à jour : lun. 09 mai 2016, 17:55

Sauvegarder et restaurer mon site internet : comment faire ? (3/3)

Dans la première partie de cet article, nous avons vu comment sauvegarder les fichiers de vos sites. Dans la deuxième partie, nous avons vu comment sauvegarder vos bases de données et les envoyer sur un serveur distant. Maintenant, nous allons aborder la problématique de la restauration de données.

Restauration de la base de données

Comme nous avons procédé pour la sauvegarde de la base de données, nous allons utiliser MySQL pour restaurer le base à une date antérieure.

D'abord quelques fonctions supplémentaires

Certaines de ces fonctions ont déjà été utilisées dans la première partie et deuxième partie. Voici un dossier de DigiBackup téléchargeable gratuitement et librement  contenant les fichiers utilisés dans ce tutoriel.

<?php
/******************************************************************
Convertit un fichier au format binaire dans son format original
*******************************************************************/
function hex2asc($temp){
	$data = '';
	for ($i = 0; $i < strlen($temp);$i += 2) $data .= chr(hexdec(substr($temp,$i,2)));
	return $data;
	}

/******************************************************************
Crée/écrit un fichier sur le serveur
*******************************************************************/
function file_write($filename, $filecontent, $mode = 'wb'){
	if($fp = fopen($filename, $mode)){
		fwrite ($fp, $filecontent);
		fclose($fp);
		return true;
		}
	else { return false; }
	}
?>

Mise en oeuvre du script

Bien sûr, ne pas oublier de remplacer les variables par les vôtres.

<?php
include( __DIR__ .'/functions.php');
include( __DIR__ .'/config.php');
/***********************************************************************
Configuration du fichier à restaurer
***********************************************************************/
$siteToRestaure = 'nom_site_1'; //Nom du site à restaurer (doit impérativement correspondre à un nom de la variable $configuration du fichier config)
$vars = $configuration[$siteToRestaure];
$siteRoot = $vars['siteRoot'];
$table = "backup_".$siteToRestaure;
/***********************************************************************
EXECUTION DE LA RESTAURATION
***********************************************************************/
// Facultatif (décommenter les lignes suivantes uniquement si la base en place n'est pas à jour et s'assurer que le fichier config est bien renseigné pour les accès à la base de données)
/* 
$dumpToRestaure = '/chemin/absolu/vers/archive.sql.gz';
if(file_exists($dumpToRestaure)){
	$command = "gunzip < $dumpToRestaure | mysql --host=".$vars['dbConnect']['host']." --user=".$vars['dbConnect']['user']." --password=".$vars['dbConnect']['password']." ".$vars['dbConnect']['db'];
	system($command);
	$content .= "La restauration de la base de données a été effectuées avec succès"."n";
	}
else {
	$content .= "Le fichier '".$dumpToRestaure."' est introuvable. La restauration a été annulée."."n";
	$backupFailure = 'File not found';
	$subject = "Echec de la restauration de la base de données
	}
*/
if(!isset($backupFailure)){
	$subject = "Restauration du site $siteToRestaure";
	$db = new connexion($vars['dbConnect']['host'], $vars['dbConnect']['user'], $vars['dbConnect']['password'], $vars['dbConnect']['db']);
	$db->set_charset("utf8");
	$sql = "SELECT * FROM $table ORDER BY type, path";
	$qry = $db->query($sql);
	if($qry->num_rows > 0){
		if (!is_dir($siteRoot)) { 
			//Si la racine n'existe pas, essaye de créer le répertoire en attribuant les droits du répertoire précédent
			mkdir($siteRoot,0644); 
			$reps = explode('/',$siteRoot);
			$racine = '';
			for($i=1; $i< (sizeof($reps)-1);$i++){ $racine .= '/'.$reps[$i]; }
			$racineOwner = posix_getpwuid(fileowner($racine));
			$racineGroup = posix_getgrgid(filegroup($racine));
			chown($siteRoot,$racineOwner);
			chgrp($siteRoot,$racineGroup['name']);
			}
		while ($r = $qry->fetch_array()){
			$mode = octdec( str_pad($r['permissions'],4,'0',STR_PAD_LEFT) );
			if($r['type'] == 'DIR'){ 
				if (!is_dir($siteRoot.'/'.$r['path'])) mkdir($siteRoot.'/'.$r['path'],$mode);
				}
			if($r['type'] == 'FILE' && !file_exists($siteRoot.'/'.$r['path'])){ 
				file_write($siteRoot.'/'.$r['path'],$r['content']); 
				chmod($siteRoot.'/'.$r['path'],$mode); 
				}
			chown($siteRoot.'/'.$r['path'],$r['owner_name']);
			chgrp($siteRoot.'/'.$r['path'],$r['group_name']);
			}
		$nbre = $qry->num_rows;
		$qry->close();
		$content .= 'Site "'.$siteToRestaure.'" restauré dans le répertoire "'.$siteRoot.'" ('.$nbre.' fichiers)'."n";
		}
	else $content .='Pas de fichiers trouvés pour le site '.$siteToRestaure."n";
	}
/************************************************************************************* 
Fin du script - génération et envoi du rapport
**************************************************************************************/
$fin = microtime(true);
$content .= "Script terminé - Temps d'exécution : ".duree($debut,$fin)."n";
envoyer($subject,$content);
?>

Test de votre sauvegarde

Maintenant que nous avons une procédure de sauvegarde et un moyen de restaurer les fichiers, nous allons le tester. Ce processus viendra valider les étapes précédentes et permettra la remise en place rapide des sites endommagés.

Voici la procédure:

  1. Créer un répertoire sur dans l'arborescence de votre site ex: /test
  2. Créer un fichier index.html qui affichera "Test de sauvegarde"
  3. Tester que le fichier s'affiche bien avec votre navigateur ex: www.mon-site.fr/test/index.html
  4. Effectuer la sauvegarde (voir étape 1)
  5. Supprimer le répertoire "test"' que vous venez de créer
  6. Vérifier que "www.mon-site.fr/test/index.html" retourne bien une erreur dans votre navigateur
  7. Restaurer vos fichiers à l'aide de la base à que vous venez de sauvegarder
  8. Vérifier que "www.mon-site.fr/test/index.html" affiche bien "Test de sauvegarde"

 

Si à l'étape 8 votre navigateur affiche bien "Test de sauvegarde", alors votre cycle sauvegarde / restauration est valide et opérationnel.

 

Merci de me laisser un petit commentaire si vous aimez ce script ou si vous l'avez amélioré. À très bientôt !

 

 

Page 1 2 3

L'informatique facile et expliquée