Dans ce post, nous allons aborder une solution possible pour backup une base de données. Cet article est fortement inspiré d’un article anglophone, n’hésitez pas à y jeter un œil.
L’exemple donné dans l’article se base sur une distribution Débian et une base de données MySQL.
Disclamer : Je n’ai pas testé cette solution en production. Je vous laisse le soin de vérifier les impacts possibles de cette mise en place.
Backup une base de données en production, un enjeu majeur
Faire le backup de vos bases de données de production est un challenge. Pour énormément de raisons, il s’agit d’une réflexion complexe. Il existe beaucoup de besoins différents, appelant à autant de réponses possibles.
Cependant, il existe plusieurs contraintes:
- la fréquence des backups
- les problèmes de performances durant le backup
- l’espace disque utilisé par les backups
- la stratégie de conservation des backups
Je n’irai pas plus loin dans l’analyse, cet article n’est pas là pour définir qu’elle est l’approche la plus adaptée en fonction de votre situation, mais pour proposer une solution possible à cette problématique.
Utiliser Git pour historiser sa base de données
L’idée d’utiliser Git pour stocker ces backups SQL a du sens. En effet, le SQL est un langage, un backup de base n’est rien d’autre que du code, pourquoi ne pas le stocker directement grâce à Git … comme le reste de votre code.
J’y vois deux avantages :
- la simplicité de l’automatisation d’un tel processus
- bénéficier de la performance de stockage de Git qui ne stocke pas l’ensemble des versions des fichiers, mais les différences entre ces versions
Préparation du répertoire
Dans un premier temps, après avoir installé et configuré git, il faut préparer le répertoire dans lequel vous allez gérer votre backup :
# création du répertoire de backup et création du backup initial
mkdir -p /path/to/backup
cd /path/to/backup
mysqldump -u [user] -p[pwd] --skip-extended-insert [database] > [database].sql
# initialisation de git
git init
git add [database].sql
git commit -m "Initial commit backup database"
# paramétrer le dépôt git distant
git remote add origin [git-depot-url]
git push -u origin --all
git push --tags
avec :
- [database] : le nom de base à backup
- [user] et [pwd] : le nom d’utilisateur et le password de l’utilisateur de la base utilisée pour le backup
- [git-depot-url] : l’URL du dépôt sur lequel déposer votre base
L’utilisation de l’option « –skip-extended-insert » de mysqldump, permet de rendre beaucoup plus lisible les commits. Chaque commit laissera ainsi apparaître uniquement les lignes ajoutées, modifiées ou supprimés dans la base. De plus, git appréciera, car il devra gérer un dépôt de taille plus raisonnable.
Automatisation des backups
Maintenant que tout est initialisé, il faut passer à l’automatisation des backups, pour cela éditer le fichier crontab avec la commande :
crontab -e
Ajouter la ligne suivante :
0 0 * * * cd /path/to/backup && \\ mysqldump -u [user] -p[pwd] --skip-extended-insert [database] > [database].sql && \\ git commit -am "Updating DB backup" && \\ git push
Elle créée le backup et le commit et le push sur Git toutes les heures. La fréquence de backup est à adapter au projet, cron offre de nombreuses possibilités de planification.
En bonus, quelques conseils et astuces pour mettre en place cette solution:
- Mettre en place la connexion SSH avec le dépôt Git avec une paire de clef public/privé
- Optimisez les performances de Git en ajoutant un cron hebdomadaire avec la commande « git gc »
- Créer un utilisateur spécifique dans la base de données ayant uniquement les droits en lecture sur la base de données depuis la machine
- Faire les backups sur un autre point de montage, pour éviter de grignoter l’espace disque du point de montage de la base de données
- Utiliser bitbucket, ce dernier permet d’avoir des dépôts privés gratuits
Pour conclure
D’après moi, cette solution peut être efficace dans le cadre de base de données pas trop volumineuse, permettant ainsi de réaliser des backups fréquents sans consommer énormément d’espaces disques grâce à Git.
Si vous avez déjà mis en place un système similaire ou que vous être plus compétent que moi, n’hésitez pas à faire des remarques! Je suis tout ouïe!
N’hésitez pas à me laisser un feedback sur cet article en attribuant une note (système d’étoiles en dessous de l’article) ou en me commentant vos impressions. Si vous l’avez apprécié, vous pouvez également le partager pour mon plus grand plaisir ;).
Sources :
The post Backup une base de données avec Git appeared first on Wodric.
Original post of Wodric.Votez pour ce billet sur Planet Libre.