Je vais vous présenter comment faire un backup synchronisé d’une base de données, en fait en Dump SQL automatisé. Ça fait suite au précédent article https://www.imingo.fr/sauvegarde-incremental-rsync-fichier/ où là je faisais un backup automatisé de fichiers de WordPress. Cette fois je prends toujours exemple sur WordPress mais avec la base de données.
Gérer les clés SSH pour se connecter sans mot de passe
Pour cette partie-là, je vous invite à aller l’article sauvegarde des fichiers, cité ci-dessus. Je vous explique comment installer une clé SSH.
Configurer le mot de passe MySQL
Par sécurité, je ne vais pas inclure le mot de passe dans le script, ni en ligne de commande, il pourrait être visible à travers le réseau. Il faut le configurer pour cela sur le serveur où est installé la base de données de WordPress. Je vais, ici, le configurer dans le fichier /etc/mysqldump.cnf. Et lui attribuer un minimum de droit avec un chmod (uniquement lecture/écriture pour l’user root).
/etc/mysqldump.cnf [mysqldump] user=wordpress password=1234 chmod 400 /etc/mysqldump.cnf
Création du script Bash pour faire une sauvegarde incrémentale
Je me place dans mon dossier de travail, où sera créé le script Bash. cd /root/tuto/rsync et je vais commencer par entrer mes commandes.
#!/bin/bash # dumpSQL-inc.sh v1 Incremental backup wordpress database # Code # ----
Dans un premier temps j’indique la variable SERVEUR qui va être l’adresse IP (ou cela peut-être un nom) de la machine où je dois récupérer le dossier WordPress, puis le chemin avec la variable BACKUP où seront synchronisé les données sur le serveur de backup.
Ensuite pour l’incrémentation des sauvegardes, je vais indiquer dans la variable BACKUPDATE d’afficher la date du jour avec l’heure, qui va changer à chaque fois que le script est exécuté, sous cette forme annéemoisjour-heureminute avec la commande date.
Les variables
SERVEUR='81.28.97.137' BACKUP='/home/backup' BACKUPDATE=$(date +"%Y%m%d-%H%M")
je vous montre en ligne de commande, avec un echo, ce que donne la variable BACKUPDATE.
echo $(date +"%Y%m%d-%H%M") 20190320-2327
Le code source de la vidéo :
#!/bin/bash # dumpSQL-inc.sh v1 Incremental backup wordpress database # Copy ssh key # ------------ # voir rsync-inc.sh # Configuartion mysqldump.cnf # --------------------------- # edit /etc/mysqldump.cnf # [mysqldump] # user=wordpress # password=1234 # # chmod 400 /etc/mysqldump.cnf # --defaults-extra-file => 1er # DEV # ---- # cd /root/tuto/dumpSQL # Test old backup # touch -d "31 days ago" wordpress-___.sql.gz #. /root/tuto/rsync/rsync-inc.conf # Code # ---- SERVEUR='81.28.97.137' BACKUP='/home/backup' BACKUPDATE=$(date +"%Y%m%d-%H%M") [ ! -d $BACKUP ] && mkdir $BACKUP && chown 0.0 $BACKUP && chmod 600 $BACKUP echo "Dump SQL..." ssh root@$SERVEUR " mysqldump --defaults-extra-file=/etc/mysqldump.cnf --host=localhost \ --add-drop-table --add-locks --complete-insert \ wordpress | gzip -q5 > /tmp/wordpress.sql.gz " echo "Archive" scp -p22 root@$SERVEUR:/tmp/wordpress.sql.gz $BACKUP/wordpress-"$BACKUPDATE".sql.gz ssh root@$SERVEUR "rm /tmp/wordpress.sql.gz" find $BACKUP -maxdepth 1 -type f -name 'wordpress-*.sql.gz' -mtime +30 | xargs rm -vf
Bonjour, je en comprend pas trop, avant une sauvegarde incrémentale n’est il pas judicieux de créer une sauvegarde total avant ? Merci d’échanger avec moi. Sans vouloir vous corriger il manque un » à la ligne 34 . Je suis à la recherche de ressources pour les sauvegardes incrémentiel en bash pour un site wordpress que j’enverrais sur lun serveur FTP via la commande sftp. Malheureusement je ne trouve rien de bien probant, avez vous des ressources à m’indiquer pour bien travailler sur mon script ?
Bonjour,
> avant une sauvegarde incrémentale n’est il pas judicieux de créer une sauvegarde total
Non, pas dans ce script.
> il manque un » à la ligne 34
Pas d’erreur, il y a bien un retour à ligne. Le commande est fermée à la ligne 38.
> que j’enverrais sur un serveur FTP via la commande sftp.
Vous pouvez utiliser SFTP:
sftp remote_username@server_ip_or_hostname
Bonjour,
Merci pour vos scripts de sauvegarde fichier et BDD, ils m’ont beaucoup aidé.
Ayant plusieurs base de données WordPress (et autres), j’ai modifié le script pour qu’il récupère la liste des bases de données disponible et qu’il intègre une boucle.
#!/bin/bash
# Dump SQL
SERVEUR=’XX.XX.XX.XX’
BACKUP=’/home/XXX’
BACKUPDATE=$(date + »%Y%m%d-%H%M »)
[ ! -d $BACKUP ] && mkdir $BACKUP && chown 0.0 $BACKUP && chmod 600 $BACKUP
ssh root@$SERVEUR « mysql –defaults-extra-file=/etc/mysql/mysqldump.cnf –host=localhost -e ‘SHOW DATABASES;’ | tr -d ‘| ‘ | grep -v -e Database -e _schema -e mysql > databases.txt »
scp -22 root@$SERVEUR:databases.txt ./
DATABASES=$(cat databases.txt)
echo « Démarrage du dump SQL pour toutes les bases suivantes : » $DATABASES
# boucle sur les bases pour les dumper
for DB_NAME in $DATABASES; do
echo « Dump SQL pour » $DB_NAME
ssh root@$SERVEUR »
mysqldump –defaults-extra-file=/etc/mysql/mysqldump.cnf –host=localhost \
–add-drop-table –add-locks –complete-insert \
$DB_NAME | gzip -q5 > /tmp/$DB_NAME.sql.gz
»
echo « Archive pour » $DB_NAME
scp -p22 root@$SERVEUR:/tmp/$DB_NAME.sql.gz $BACKUP/$DB_NAME-« $BACKUPDATE ».sql.gz
ssh root@$SERVEUR « rm /tmp/$DB_NAME.sql.gz »
find $BACKUP -maxdepth 1 -type f -name ‘$DB_NAME-*.sql.gz’ -mtime +7 | xargs rm -vf
done
Merci pour votre script modifié 🙂