Files
abonnel-www/7752fdd9-61b3-4c45-8b81-8538e7b5d691/index.md
T

3.3 KiB

Sauvegarde d'une base de données MariaDB

Il existe deux façons de sauvegarder une base MariaDB en ligne de commande. La première est recommandée car elle évite d'exposer le mot de passe ; la seconde, plus rapide à taper, le laisse apparaître dans l'historique du shell et dans la sortie de ps.

Ouvrez un terminal sur votre système avant de commencer.

Méthode recommandée : identifiants dans .my.cnf

Créez dans le répertoire personnel de l'utilisateur (~) un fichier .my.cnf contenant les identifiants utilisés pour la sauvegarde.

[mysqldump]
user=cedric
password='&qy9zh%Mzz$mA'

Restreignez immédiatement ses permissions pour que lui seul puisse le lire :

chmod 600 ~/.my.cnf

Lancez ensuite la sauvegarde avec mariadb-dump (ou mysqldump si la première commande n'est pas disponible) :

mariadb-dump -h [nom_du_serveur] [nom_de_la_base_de_données] > backup_[nom_de_la_base_de_données]_$(date "+%Y%m%d-%H%M%S").sql

Script complet

Le script ci-dessous crée le dump, l'archive au format tar.gz, puis supprime le fichier temporaire. Chaque étape est journalisée et toute erreur interrompt l'exécution.

#!/bin/bash

set -e
set -o pipefail

## Backup de la base de données

dateHeure=$(date "+%Y%m%d-%H%M%S")
database=[nom_de_la_base_de_donnees]
db_host=[nom_du_serveur]
file_log=/var/log/save_${database}-${dateHeure}.log
path_tmp=/tmp
path_backup=/var/backup
file_dump=backup_${database}_${dateHeure}.sql
file_dump_archive=${file_dump%.*}.tar.gz

checkError() {
    status=${1}
    message=${2}
    file_log=${3}
    if [ "$status" -ne 0 ]
    then
        echo "Erreur : ${message}" | tee -a "${file_log}"
        echo "Fin du script" | tee -a "${file_log}"
        exit "$status"
    fi

    return
}

echo -e "\n  Création du dump de la base de données" | tee -a "${file_log}"
mariadb-dump -h "${db_host}" "${database}" > "${path_tmp}/${file_dump}"
checkError $? "création du dump de la base" "${file_log}"

echo -e "\n  Création de l'archive du dump" | tee -a "${file_log}"
tar zcvf "${path_backup}/${file_dump_archive}" "${path_tmp}/${file_dump}" | tee -a "${file_log}"
checkError $? "création de l'archive" "${file_log}"

echo -e "\n  Suppression du dump" | tee -a "${file_log}"
rm "${path_tmp}/${file_dump}" | tee -a "${file_log}"
checkError $? "suppression du dump de la base de données" "${file_log}"

set -o pipefail garantit qu'une erreur dans mariadb-dump sera bien remontée même lorsqu'elle est suivie d'un tee. Le dump n'est volontairement pas redirigé vers le log : seuls les messages d'étape y figurent.

Méthode non sécurisée : identifiants en ligne de commande

À éviter en production : le mot de passe apparaît dans l'historique du shell et peut être visible via ps.

mariadb-dump -u [utilisateur] -p[password] [nom_de_la_base_de_données] > [nom_du_fichier_de_sauvegarde.sql]
  • [utilisateur] : nom d'utilisateur MariaDB.
  • [password] : mot de passe, collé immédiatement après -p (sans espace). Omettez-le pour que la commande le demande de manière interactive — c'est déjà plus sûr.
  • [nom_de_la_base_de_données] : base à sauvegarder.
  • [nom_du_fichier_de_sauvegarde.sql] : fichier de destination, généralement avec l'extension .sql.

Le fichier produit contient toutes les instructions SQL nécessaires à la restauration ultérieure de la base.