La solution proposée ici est un backup conservant un historique quotidien des bases de données MySQL.

PHP Command Line Tool

Assurez-vous d'avoir installé l'outil permettant d'utiliser des scripts PHP en ligne de commande.

# apt-get install php5-cli

Création d'un utilisateur MySQL

Ouvrez phpMyAdmin, et rendez-vous dans l'onglet "Privilèges".

Créez un nouvel utilisateur, pour l'exemple nous l'appellerons bruce et nous imaginerons que son mot de passe est toutpuissant. Etant donné que cet utilisateur n'est supposé que de faire des backups, nous allons lui donner le moins de privilèges possibles. Ne sélectionnez que les suivants :

  • SELECT
  • SHOW VIEW
  • SHOW DATABASES
  • LOCK TABLES

Création du script de backup

Choisissez un répertoire qui contiendra vos scripts de backup, par exemple /backup/scripts/ et créez un fichier mysql.php.

# nano /backup/scripts/mysql.php

Voici le code à y placer :

#!/usr/bin/php
<?php

$path = "/backup/sql/";
$user = "bruce";
$pass = "toutpuissant";

# Création du répertoire
$day = date("Y-m-d");
if (!is_dir($path . $day)) mkdir($path . $day, 0700);
$pathToday = $path . $day . "/";

# Sauvegarde des bases de données
mysql_connect("localhost", $user, $pass);
$q = mysql_query("SHOW DATABASES");
while($r = mysql_fetch_assoc($q)) {
        $db = $r['Database'];
        $dbfile = $pathToday . $db . ".sql";
        exec("mysqldump -u$user -p$pass -B $db > $dbfile");
        exec("gzip -f $dbfile");
}
?>

Prenez soin de paramétrer les trois premières paramètres étant :

  • $path : Le répertoire des sauvegardes
  • $user : L'utilisateur ayant accès à MySQL
  • $pass : Mot de passe de l'utilisateur

La suite du script s'occupe de créer un répertoire en date du jour dans le répertoire $path. Ensuite, chaque base de données est dumpée grâce à mysqldump, et nous utilisons gzip afin de compresser le fichier et gagner de l'espace disque.

Tester votre script

Commencez par donner les droits en exécution, puis lancez-le.

# chmod o+x mysql.php
# ./mysql.php

Vous devriez voir vos fichiers dans le répertoire spécifié.

Définir le Cron Job

Pour que cela se faire automatiquement chaque jour, ouvrez le fichier crontab.

# nano /etc/crontab

Rajoutez la ligne suivante.

00 06 * * * root /backup/scripts/mysql.php

Cette ligne représente un backup quotidien à 6h du matin. 00 représente les minutes, 06 l'heure, et les trois astérisques respectivement le jour dans le mois, le mois, le jour de la semaine.

Relancez le démon.

# /etc/init.d/cron restart

Et voilà

Maintenant, vos bases de données seront sauvegardées tous les jours. Pour plus de sécurité, sauvegardez-les sur un disque différent de celui utilisé par MySQL.

En cas de problème dans l'exécution de la commande, un e-mail sera envoyé à root.