C’est la première étape pour la sauvegarde de son site en 3 étapes et surement la plus importante pour votre CMS, WordPress, etc : La sauvegarde de la base de données.

On va sauvegarder ses bases de données MySQL via un script PHP qui pourra être interprété par la grande majorité des hébergeurs. Vous disposez d’une fonction de tâche planifiée pour effectuer vos backups automatiquement. L’hébergeur propose d’envoyer par mail le retour du script, vous pourrez donc visionner le bon déroulement des backups. Ces dump MySQL seront placés dans la partie privée de votre FTP.

Voici le script PHP à mettre dans la partie privée de votre hébergement : backup_mysql.php

  • Pour le point backupdir : c’est le répertoire utilisateur de votre compte chez l’hébergeur. Si vous ne l’avez pas, vous pouvez le savoir avec un ‘pwd’ ou un ‘echo $HOME’ mis dans un script dans une tâche planifiée. Mettez bien cela dans la partie privée du FTP de votre hébergement!
  • Pour mettre la tâche planifiée, cela dépend de votre interface d’hébergeur. Mais tout hébergeur avec Cpanel le propose, ainsi qu’OVH. Je vous conseille de faire un backup chaque jour de la base de données de votre site. S’il est fort fréquenté, comme un blog WordPress avec commentaires, alors même plusieurs fois par jour…

Voici le script en question :

<?php

$server='';		// serveur mysql
$login='';		//login mysql
$mdp='';		//mot de passe mysql
$backupdir='/home/a4327242/backup_db';		// pour savoir le répertoire local de votre hébergeur si c'est pas indiqué, faite la commande 'pwd' dans l'interface cron
$logfile='/home/a4327242/backup_db/backup_db.log';
$timezone='Europe/Brussels';	// pour les heures des fichier de logs

//un appel par base de données (souvent une seule pour un hébergeur)
backup_tables($server,$login,$mdp,$backupdir,$timezone,$logfile,'nom_base_de_donnees');


/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$backupdir,$timezone,$log,$name,$tables = '*')
{
	$link = mysql_connect($host,$user,$pass);
	mysql_select_db($name,$link);
	
	//get all of the tables
	if($tables == '*')
	{
		$tables = array();
		$result = mysql_query('SHOW TABLES');
		while($row = mysql_fetch_row($result))
		{
			$tables[] = $row[0];
		}
	}
	else
	{
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
	
	//cycle through
	foreach($tables as $table)
	{
		$result = mysql_query('SELECT * FROM '.$table);
		$num_fields = mysql_num_fields($result);
		
		$return.= 'DROP TABLE '.$table.';';
		$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
		$return.= "\n\n".$row2[1].";\n\n";
		
		for ($i = 0; $i < $num_fields; $i++) 
		{
			while($row = mysql_fetch_row($result))
			{
				$return.= 'INSERT INTO '.$table.' VALUES(';
				for($j=0; $j<$num_fields; $j++) 
				{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = ereg_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ");\n";
			}
		}
		$return.="\n\n\n";
	}
	
	//save file
	$date = new DateTime();
	$date->setTimeZone(new DateTimeZone($timezone));

	$filename=$backupdir.'/db-'.$name.'-'.$date->format('Y-m-d H:i').'-'.(md5(implode(',',$tables))).'.sql';
	$handle = fopen($filename,'w+');
	fwrite($handle,$return);
	fclose($handle);
	echo "File $filename create successful";
}

?>

Pour la 2e étape, clonez le contenu de votre FTP chez vous comme backup! Vos dump MySQL avec 😉