Le Blog Web & Mobile

Le Blog by tellibus » Tutoriel PHP : Programmer des backups automatiques d’une base de données MySQL et les envoyer via FTP

6 mai 2013

Tutoriel PHP : Programmer des backups automatiques d’une base de données MySQL et les envoyer via FTP

A. Bennouna 171241 vues 30 commentaires
tutoriel, PHP, MySQL, backup, FTP, PDO, cron

Créez des sauvegardes automatiques à fréquence régulière de vos bases de données et envoyez-les sur un serveur FTP de backup.

L’automatisation des backups n’est pas un luxe

Si vous avez à administrer une ou plusieurs base(s) de données, vous vous rendez sûrement compte du temps et de l’énergie dépensés à faire des backups quotidiens. C’est peut-être même pour cette raison que vos backups ne sont pas quotidiens, mais hebdomadaires... De plus, la procédure étant manuelle, vous ratez parfois des tables, ou vous incluez cette fameuse table historique inutile à sauvegarder, et très volumineuse à elle seule.

Nous explorerons ici un petit script en PHP qui effectue automatiquement la sauvegarde, stocke le tout au format sql dans un fichier gzippé pour gagner de l’espace disque, et l’envoie également sur un serveur FTP. Comme nous utilisons PDO, la base de données cible n’est pas limitée à MySQL.

Par ailleurs, n’importe quel langage de programmation qui peut accéder à votre base de données peut faire l’affaire. Si vous convertissez ce script dans un autre language, laissez-nous un petit commentaire pour que nous puissions ajouter un lien vers votre adaptation.

L’idée de base

Ce tutoriel est fortement inspiré (et librement adapté) de l’article suivant : Backup Your MySQL Database Using PHP.

Etape 1 : Les données de connexion

Dans cette étape, nous allons renseigner les données de connexion :

  • à la base de données à sauvegarder,
  • et au serveur FTP sur lequel nous allons envoyer le backup.

Etape 2 : Les tables à exclure

Dans cette étape, nous allons indiquer au format tableau PHP (array) les tables :

  • que nous souhaitons exclure complètement (tableau $excludedTables),
  • dont nous souhaitons exclure les données (tableau $onlyStructureTables),

Etape 3 : Les chemins et le fichier log

Dans cette étape, nous allons spécifier le chemin absolu local sur lequel nous allons stocker le backup au format sql gzippé, ainsi que les logs.

Bien qu’on ait un fichier de backup individuel par exécution de ce script PHP, on a choisi d’avoir un log par journée regroupant tous les traces des exécutions de ladite journée. Pour un log plus convivial et lisible, on a choisi le format html.

Etape 4 : La connexion à la base de données

Dans cette étape, nous allons nous connecter à la base de données grâce au connecteur PDO approprié, ici pour une base de données MySQL. Vous pouvez aisément remplacer par le connecteur de votre base de données.

Etape 5 : Liste des tables à sauvegarder

Dans cette étape, nous allons demander la liste des tables à la base de données, et construire un tableau contenant le nom de ces tables, exclusion faite des tables indiquées dans le tableau $excludedTables.

Etape 6 : Démarrage de la transaction de backup

Dans cette étape, nous allons commencer à générer la variable $return qui contiendra en fin de script PHP l’ensemble de la transaction sql de sauvegarde de notre base de données. Nous désactivons également les contraintes de clés étrangères pour éviter les erreurs de vérification lors des exécutions ultérieures du script de backup.

Etape 7 : Génération de la structure des tables

Dans cette étape, nous allons boucler sur les tables à sauvegarder, en concaténant à la variable $return les instructions sql de suppression et de création de chaque table.

Etape 8 : Génération des données des tables concernées

Dans cette étape, nous allons utiliser la boucle précédente pour concaténer à la variable $return les instructions sql d’insertion des enregistrements de la table en cours, à condition qu’elle ne figure pas dans le tableau $onlyStructureTables.

Etape 9 : Clôture de la transaction de backup

Dans cette étape, nous allons finaliser la variable $return avec la clôture de la transaction sql de sauvegarde de notre base de données, tout en réactivant la vérification des contraintes de clés étrangères.

Etape 10 : Sauvegarde du script sql de la transaction de backup

Dans cette étape, nous allons sauvegarder la variable $return dans un fichier au format sql gzippé.

Etape 11 : Envoi du script sql gzippé sur le serveur FTP

Dans cette étape, nous allons enregistrer le script au format sql gzippé sur le serveur FTP de backup indiqué.

Etape 12 : Ecriture du fichier de trace

Dans cette étape, nous allons réellement écrire le fichier log.

Le script PHP en entier

Et voici le script PHP dans son intégralité.

Programmation du script PHP

Pour tirer plein parti de ce script, vous devez bien entendu le programmer de manière adéquate, via cron sous Unix ou le Planificateur de tâches sous Windows.

Par exemple, sous Unix, pour lancer la sauvegarde automatique toutes les nuits à 4h, nous pouvons ajouter cette tâche (à adapter selon le nom et le chemin de votre fichier php) :