Comment faire une sauvegarde incrémentale de WordPress : base de données

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

4 thoughts on “Comment faire une sauvegarde incrémentale de WordPress : base de données

  1. 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 ?

    1. 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

  2. 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

Comments are closed.