Comment automatiser les sauvegardes de base de données MySQL avec un script Shell
Les sauvegardes sont essentielles pour maintenir vos données en sécurité, et automatiser le processus de sauvegarde peut vous faire gagner à la fois du temps et des efforts. Si votre base de données est jamais perdue ou corrompue, avoir une sauvegarde récente peut être un véritable sauveur.
Les sauvegardes régulières sont cruciales pour tout site web ou application utilisant une base de données MySQL. Automatiser ce processus garantit que les sauvegardes se produisent régulièrement, sans avoir besoin de se souvenir de les effectuer manuellement.
Dans ce guide, nous vous montrerons comment créer un script Bash simple pour automatiser les sauvegardes de bases de données MySQL. Ensuite, nous configurerons un travail Cron pour exécuter automatiquement ce script de sauvegarde à des moments programmés, garantissant que vos bases de données sont sauvegardées sans faute.
Étape 1 : Création d'un script de sauvegarde MySQL
Tout d'abord, créons un script Bash simple qui gérera le processus de sauvegarde.
nano backup_mysql.sh
Copiez et collez le script suivant dans le fichier backup_mysql.sh :
#!/bin/bash
MySQL Credentials
MYSQL_USER="your_mysql_username"
MYSQL_PASS="your_mysql_password"
MYSQL_HOST="localhost"
Backup Directory (ensure this directory exists)
BACKUP_DIR="/path/to/your/backup/directory"
Email settings
EMAIL_TO="[email "
EMAIL_SUBJECT="MySQL Backup Report - $(date +"%Y-%m-%d %H:%M:%S")"
EMAIL_BODY=""
Get current date to append to backup filename
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
Databases to back up (list the names of the databases you want to back up)
DATABASES=("db1" "db2" "db3")
Loop through each database and back it up
for DB in "${DATABASES[@]}"; do
BACKUP_FILE="$BACKUP_DIR/$DB_$DATE.sql"
echo "Backing up database $DB to $BACKUP_FILE..."
# Perform the backup using mysqldump
mysqldump -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST $DB > $BACKUP_FILE
# Check if the backup was successful
if [ $? -eq 0 ]; then
echo "Backup of $DB completed successfully!"
else
echo "Backup of $DB failed!"
fi
done
Clean up backups older than 30 days (optional)
find $BACKUP_DIR -type f -name "*.sql" -mtime +30 -exec rm -f {} \;
Send email alert
echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$EMAIL_TO"
Que fait ce script ?
- Identifiants MySQL : Vous devez fournir votre nom d'utilisateur MySQL, votre mot de passe et l'hôte (généralement localhost).
- Répertoire de sauvegarde : C'est ici que vos sauvegardes seront stockées. Assurez-vous que ce répertoire existe sur votre système.
- Sauvegarde horodatée : Le script crée des sauvegardes avec un horodatage (par exemple, 2025-04-28_12-30-00.sql) afin d'éviter d'écraser les anciennes sauvegardes.
- Bases de données à sauvegarder : Dans le tableau
DATABASES, listez les noms des bases de données que vous souhaitez sauvegarder. Vous pouvez ajouter ou supprimer des bases de données selon vos besoins. - Commande de sauvegarde : Le script utilise mysqldump pour créer des sauvegardes de vos bases de données.
- Nettoyage des anciennes sauvegardes : Le script supprime également les sauvegardes de plus de 30 jours (vous pouvez ajuster cette durée si nécessaire).
- Alertes par e-mail : Après avoir exécuté la sauvegarde, le script envoie un e-mail avec les résultats – si chaque sauvegarde de base de données a réussi ou échoué.
Synchroniser la sauvegarde vers le serveur distant (Optionnel mais recommandé)
Après la création de votre sauvegarde locale, il est judicieux de la synchroniser avec un serveur distant pour plus de sécurité, ce qui garantit que vos sauvegardes survivent même si votre serveur principal tombe en panne.
Voici la commande rsync que vous pouvez ajouter à la fin de votre script de sauvegarde :
# Sync backup to remote server (optional but recommended)
SSH_KEY="/path/to/your/private/key.pem" # Path to your SSH private key
REMOTE_USER="your_remote_user" # Remote server username
REMOTE_HOST="your.remote.server.com" # Remote server address
REMOTE_DIR="/path/on/remote/server" # Target directory on remote server
rsync -avz \
-e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" \
--delete-after \
"$BACKUP_DIR/" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
Assurez-vous que le serveur distant est accessible et que le répertoire de destination existe avec les permissions d'écriture appropriées.
Une fois que vous avez enregistré votre script, rendez-le exécutable en exécutant la commande chmod :
chmod +x backup_mysql.sh
Étape 2 : Tester le script de sauvegarde MySQL
Avant de configurer le travail Cron, il est conseillé de tester le script manuellement pour s'assurer que tout fonctionne comme prévu.
./backup_mysql.sh
Vérifiez votre répertoire de sauvegarde pour vous assurer que les sauvegardes sont créées avec succès. Si tout semble correct, passez à l'étape suivante.
Étape 3 : Automatisation des sauvegardes MySQL avec des tâches Cron
Maintenant que nous avons le script de sauvegarde, l'étape suivante consiste à l'automatiser en utilisant Cron, un outil qui exécute des commandes à des moments programmés.
crontab -e
Ajoutez un travail Cron pour exécuter automatiquement le script de sauvegarde. Par exemple, pour exécuter le script chaque jour à 2h du matin, ajoutez la ligne suivante :
0 2 * * * /bin/bash /path/to/your/backup_mysql.sh
Voici comment fonctionne le calendrier Cron :
0: La minute (0e minute).2: L'heure (2 heures du matin).*: Chaque jour du mois.*: Chaque mois.*: Tous les jours de la semaine.
Pour vérifier que votre tâche Cron fonctionne, vous pouvez consulter les journaux système ou régler temporairement le script pour qu'il s'exécute à un moment plus proche afin de voir s'il fonctionne.
grep CRON /var/log/syslog
Considérations supplémentaires
- Sécurité : Stocker votre mot de passe MySQL dans le script est pratique mais pas sécurisé. Pour une meilleure sécurité, vous pouvez stocker vos identifiants dans un fichier
.my.cnfdans votre répertoire personnel et configurer le script pour les lire depuis ce fichier. - Emplacement de sauvegarde : Assurez-vous que le répertoire de sauvegarde dispose de suffisamment d’espace pour vos sauvegardes. Si vous effectuez plusieurs sauvegardes, il est conseillé de configurer un emplacement de stockage séparé (comme un disque dur externe ou un stockage cloud).
- Fréquence de sauvegarde : En fonction de la fréquence à laquelle vos données changent, vous pourriez vouloir ajuster le planning du travail Cron. Par exemple, vous pourriez exécuter la sauvegarde toutes les heures, chaque semaine ou seulement certains jours.
Conclusion
En automatisant les sauvegardes MySQL avec un simple script Bash et une tâche Cron, vous vous assurez que vos bases de données sont sauvegardées en toute sécurité régulièrement sans avoir besoin de vous rappeler de le faire manuellement. Avec seulement quelques lignes de code, vous pouvez mettre en place un système de sauvegarde automatique qui s'exécute aux intervalles que vous préférez.