PHP : Sauvegarde automatisée d’un serveur MySQL

Suite à quelques petits soucis techniques avec mon serveur la semaine dernière, j’ai créé un petit script PHP pour sauvegarder automatiquement toutes les bases de données de mon serveur MySQL. Si ça peut servir à quelqu’un d’autre, voici.

Contexte : Le week-end dernier, le serveur SQLPrivé que je loue à OVH est tombé en panne. OVH propose avec le SQLPrivé un service de sauvegarde automatisable des bases, sauf que si le serveur est en panne, et bien… pas moyen de les récupérer, c’est malin. Comme en plus c’est tombé le week-end du 1er novembre, pas moyen de trouver un technicien pour me relancer tout ça, résultat, mes sites n’ont plus été accessibles pendant trois jours. J’ai donc décidé de créer mon propre script de sauvegarde pour sauvegarder les dumps sur mon hébergement et non sur le serveur où tourne MySQL.

Pour info, j’utilisais aussi avant le script mysqlautobackup écrit en shell, mais connaissant mal ce langage je pouvais difficilement le personnaliser, d’où l’idée de repartir à zéro pour lui faire faire vraiment ce que je voulais. Ce script fonctionne chez moi sur un hébergement OVH pro et un SQLPrivé, mais il n’y a pas de raison qu’il ne fonctionne pas aussi ailleurs, a priori. Il est pensé pour sauvegarder automatiquement toutes les bases trouvées sur le serveur, mais si votre couple user / pass ne vous donne accès qu’à une base, il sauvegardera celle là.

Voici ce que fait le script, dans l’ordre :

  1. Connexion au serveur MySQL et récupération de la liste des bases
  2. Pour chaque base, dump et compression en gzip dans le répertoire courant > base.sql.gz
  3. Copie du dernier dump dans aaaa/xxx ou aaa est l’année et xxx le jour de l’année (sur 365), si le répertoire xxx n’existe pas
En gros, en plus de la dernière sauvegarde (qui est écrasée à chaque nouvelle sauvegarde), le script crée des répertoires sous la forme 2010/307 (pour aujourd’hui par exemple) et y garde une copie de chaque base, par sécurité. Ce qui fait que votre espace disque peut vite se remplir, il faut donc penser à vider de temps en temps les dumps qui ne sont plus nécessaire.

Ce script se contente de sauvegarder les bases lorsqu’il est lancé. Pour le lancer automatiquement, il faut utiliser un service comme le cron de linux ou, chez OVH, le planificateur de tâches accessible depuis votre manager. Perso, je le lance toutes les heures, mais je suis encore sous le choc de l’expérience du week-end dernier.

Quelques idées pour de prochaines versions :

  • Rapport d’erreurs par e-mail
  • Rotation des dumps pour ne garder que les x derniers, par exemple
  • Sauvegarde sur un FTP distant pour plus de sécurité
  • Duplication des bases sur un autre serveur mysql qui puisse prendre le relais en cas de panne

Télécharger mysqlbackup1.0.zip

Laisser un commentaire