92 lines
3.3 KiB
Markdown
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. |