Modifications pour le document Sauvegarde
Modifié par john le 2026/10/03 20:01
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Contenu
-
... ... @@ -101,19 +101,11 @@ 101 101 102 102 == Script == 103 103 104 -{{code language="bash"}}#!/bin/bash 104 +{{code language="bash"}} 105 +#!/bin/bash 105 105 set -euo pipefail 106 -umask 077 107 +umask 077 # Ajout : dumps lisibles par root seul 107 107 108 -# Alertes Telegram 109 -. /root/.backup-telegram 110 -notifier() { 111 - curl -fsS -m 10 "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \ 112 - -d chat_id="$TG_CHAT" --data-urlencode text="$1" >/dev/null || true 113 -} 114 -attention() { echo "ATTENTION: $1" >&2; notifier "⚠️ Sauvegarde : $1"; } 115 -trap 'notifier "❌ Sauvegarde interrompue à la ligne $LINENO"' ERR 116 - 117 117 REPO="sftp://<UTILISATEUR>@<HOTE_DEPOT>:<CHEMIN_DEPOT>" 118 118 KEYFILE="<FICHIER_PHRASE_SECRETE>" 119 119 DUMPS="<APPDATA>/dumps" ... ... @@ -125,19 +125,19 @@ 125 125 > "$DUMPS/$c.sql" 2>/dev/null \ 126 126 || docker exec "$c" sh -c 'exec mariadb-dump -uroot -p"${MYSQL_ROOT_PASSWORD:-$MARIADB_ROOT_PASSWORD}" --all-databases' \ 127 127 > "$DUMPS/$c.sql" 2>/dev/null \ 128 - || attention"dump $c échoué"120 + || echo "ATTENTION: dump $c échoué" >&2 129 129 done 130 130 131 131 # Nextcloud : dump via l'utilisateur applicatif 132 132 docker exec "$(docker ps -q -f name=nextcloud_db)" sh -c 'exec mariadb-dump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \ 133 133 > "$DUMPS/nextcloud.sql" 2>/dev/null \ 134 - || attention"dump nextcloud échoué"126 + || echo "ATTENTION: dump nextcloud échoué" >&2 135 135 136 136 # Dumps PostgreSQL 137 -for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do 129 +for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do # Ajout : dawarich_db 138 138 docker exec "$c" sh -c 'exec pg_dumpall -U "$POSTGRES_USER"' \ 139 139 > "$DUMPS/$c.sql" 2>/dev/null \ 140 - || attention"dump $c échoué"132 + || echo "ATTENTION: dump $c échoué" >&2 141 141 done 142 142 143 143 # Sauvegarde, sans core dumps, binlogs ni fichiers bruts des bases ... ... @@ -148,13 +148,12 @@ 148 148 -ignore "**/xwiki/mariadb/**" \ 149 149 -ignore "**/store.bak.*/**" \ 150 150 <APPDATA> \ 151 - <BIBLIOTHEQUE_IMMICH> \143 + <BIBLIOTHEQUE_IMMICH>\ 152 152 <CONTENU_JOPLIN> 153 153 154 154 # Rétention : 30 jours glissants 155 155 plakar -keyfile "$KEYFILE" at "$REPO" rm -before 30d -apply 156 -notifier "✅ Sauvegarde terminée"{{/code}} 157 -~{~{/code}} 148 +{{/code}} 158 158 159 159 Tâche cron, ##/etc/cron.d/backup-plakar## : 160 160 ... ... @@ -162,28 +162,6 @@ 162 162 30 3 * * * root /root/backup-plakar.sh >> /var/log/backup-plakar.log 2>&1 163 163 {{/code}} 164 164 165 -== Alertes == 166 - 167 -Le script envoie un message Telegram à chaque exécution : 168 - 169 -|=Message|=Signification 170 -|✅ Sauvegarde terminée|Tout s'est bien passé 171 -|⚠️ Sauvegarde : dump … échoué|Un dump de base a échoué, la sauvegarde a continué sans lui 172 -|❌ Sauvegarde interrompue à la ligne …|Erreur bloquante, la sauvegarde n'a pas eu lieu 173 - 174 -Si aucun message n'arrive un matin, le script n'a pas démarré (serveur éteint, tâche cron cassée). 175 - 176 -Jeton du bot et identifiant du groupe dans ##/root/.backup-telegram##, lisible par root seul : 177 - 178 -{{code language="bash"}} 179 -TG_TOKEN="<JETON_BOT>" 180 -TG_CHAT="<ID_GROUPE>" 181 -{{/code}} 182 - 183 -{{warning}} 184 -Dans le script, chaque ligne continuée doit se terminer par ##\## sans rien après, pas même un espace. Une barre oblique inverse suivie d'un espace ne continue plus la ligne : c'est ce qui a interrompu plusieurs sauvegardes en septembre 2026. Contrôle après toute modification : ##sudo bash -n /root/backup-plakar.sh##, et ##cat -A## pour voir les caractères invisibles en fin de ligne. 185 -{{/warning}} 186 - 187 187 == Ajouter une base == 188 188 189 189 Ajouter le nom du conteneur dans la boucle MariaDB ou PostgreSQL du script, puis exclure ses fichiers bruts avec un ##-ignore## s'ils se trouvent dans ##<APPDATA>##.