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

92 lines
3.3 KiB
Markdown

# 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 :
```bash
chmod 600 ~/.my.cnf
```
Lancez ensuite la sauvegarde avec `mariadb-dump` (ou `mysqldump` si la première commande n'est pas disponible) :
```bash
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.
```bash
#!/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.