Dans cet article, nous allons voir comment programmer un dump automatique de nos bases de données Mysql 8 depuis un serveur debian 11.
En prérequis vous devez avoir un serveur Debian ou Ubuntu opérationel avec le paquet MySQL Community Server déjà installé.
1 – Création de l’utilisateur qui va gérer les sauvegardes
Par mésure de sécurité nous allons créer un utilisateur qui a les droits suffisants pour aller sauvegarder nos différentes bases, sans pour autant avoir les droits admin sur le serveur MySQL.
Nous devons nous connecter avec le compte administrateur au serveur MySQL
mysql -u root -p
mysql> create user 'sauv'@'localhost' IDENTIFIED BY 'VOTREMOTDEPASSE';
mysql> GRANT LOCK TABLES, SELECT, GRANT SHOW VIEW ON *.* TO 'sauv'@'localhost';
mysql> FLUSH PRIVILEGES;
Nous allons maintenant créer un fichier qui va contenir notre utilisateur et mot de passe qui servira au script de sauvegarde automatique
vi /etc/mysql/mysql-backup-script.cnf
Inserer et adapter les éléments suivants à votre fichier
[client]
user = 'sauv'
password = 'VOTREMOTDEPASSE'
Modifier les autorisations pour sécuriser le fichier avec la commande ci-dessous :
chmod 400 /etc/mysql/mysql-backup-script.cnf
On va maintenant tester notre fichier de mot de passe pour s’assurer que le script n’aura pas de problème d’authentification avec notre serveur MySQL.
Entrez la commande ci-dessous dans votre console, si vous arrivez à vous connecter au serveur MySQL sans avoir besoin de vous identifier, cela signifie que l’authentification fonctionne.
mysql --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf
2 – Création du script de sauvegarde
Nous allons créer le script backup_sql.sh dans le repertoire /usr/local/bin
vi /usr/local/bin/backup_sql.sh
Inserer et adapater le script suivant en fonction de votre configuration
#!/bin/bash
# Configuration de base: datestamp e.g. YYYYMMDD
DATE=$(date +"%Y%m%d")
# Dossier où sauvegarder les backups (créez le d'abord !)
BACKUP_DIR="/backup/"
# Commandes MySQL
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
# Liste des bases de données MySQL à ignorer
SKIPDATABASES="Database|information_schema|performance_schema|mysql|sys"
# Nombre de jours à garder les dossiers (seront effacés après X jours)
RETENTION=14
# Créer un nouveau répertoire dans l'emplacement du répertoire de sauvegarde pour cette date
mkdir -p $BACKUP_DIR/$DATE
# Récupérer une liste de toutes les bases de données
databases=`$MYSQL --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`
# Exporter chaque base de données dans son fichier gzip
for db in $databases; do
echo $db
$MYSQLDUMP --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf --force --opt --no-tablespaces --skip-lock-tables --skip-events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done
# Supprimer les fichiers vieux de X jours
find $BACKUP_DIR/* -mtime +$RETENTION -delete
Ajoutons les droits d’exécution à notre fichier
chmod 755 /usr/local/bin/backup_sql.sh
3 – Création du cron job
Nous allons maintenant créer un tache cron qui va executer notre script backup_sql.sh tous les jours à 1 heure du matin
crontab -e
#Si vous souhaitez recevoir un mail a une adresse mail précise après la sauvegarde garder le MAILTO sinon commentez la ligne MAILTO="nom@domaine-exemple.com" 0 1 * * * /usr/local/bin/backup_sql.sh >/dev/null 2>&1
Nous avons terminé de configurer notre sauvegarde automatique, il ne reste plus qu’à surveilller à la prochaine sauvegarde que tout se passe bien.
Autodidacte dans la majeure partie de mes compétences et créateur du site gabinhocity.eu, je surf tant bien sur la vague Windows que Linux. Profondément passionné par la découverte, mes loisirs sont partagés entre la photographie et les voyages.