Files
agence66-borgmatic/hooks/seafile-docker-mysql-backup.sh
BeauTroll 9c29cc1bdc
Some checks failed
Deploy Borgmatic Configuration / Deploy to Production Server (push) Has been cancelled
Improve Seafile MySQL dump hook with better error handling and debugging
Add comprehensive validation and error messages to the Seafile MySQL backup hook:
- Add timeout (5min) to prevent mysqldump from hanging indefinitely
- Validate SEAFILE_DB_PASSWORD is set before attempting dump
- Verify Docker container exists and is running before execution
- Fix file verification bug (check correct output filename)
- Add detailed logging for easier troubleshooting
- Use set -e for fail-fast behavior

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 13:37:30 +01:00

63 lines
1.9 KiB
Bash

#!/bin/bash
# Hook Borgmatic - Dump MySQL Seafile dockerisé avant backup
set -e # Arrêter en cas d'erreur
BACKUP_DIR="/opt/seafile/backups/mysql"
DATE=$(date +%Y%m%d-%H%M)
SEAFILE_CONTAINER="seafile" # Nom de votre conteneur Seafile
MYSQL_CONTAINER="seafile-mysql" # Ou le nom de votre conteneur MySQL
echo "[$(date)] Démarrage dump MySQL Seafile..."
# Créer le répertoire de backup
mkdir -p "$BACKUP_DIR"
echo "✓ Répertoire de backup: $BACKUP_DIR"
# Charger les identifiants depuis .env
if [ -f /etc/borgmatic/.env ]; then
source /etc/borgmatic/.env
echo "✓ Variables chargées depuis /etc/borgmatic/.env"
else
echo "⚠️ /etc/borgmatic/.env non trouvé"
fi
# Vérifier que le mot de passe est défini
if [ -z "$SEAFILE_DB_PASSWORD" ]; then
echo "❌ SEAFILE_DB_PASSWORD n'est pas défini dans /etc/borgmatic/.env"
exit 1
fi
echo "✓ Mot de passe MySQL défini"
# Vérifier que le conteneur existe et tourne
if ! docker ps --format '{{.Names}}' | grep -q "^${MYSQL_CONTAINER}$"; then
echo "❌ Conteneur $MYSQL_CONTAINER non trouvé ou arrêté"
echo "Conteneurs disponibles:"
docker ps --format " - {{.Names}}"
exit 1
fi
echo "✓ Conteneur $MYSQL_CONTAINER trouvé"
# Dump unique avec toutes les bases
echo "→ Dump des bases Seafile..."
if timeout 300 docker exec "$MYSQL_CONTAINER" mysqldump \
-u seafile -p"${SEAFILE_DB_PASSWORD}" \
--single-transaction --quick --databases \
ccnet_db seafile_db seahub_db > "$BACKUP_DIR/seafile-all-$DATE.sql" 2>&1; then
SIZE=$(du -h "$BACKUP_DIR/seafile-all-$DATE.sql" | cut -f1)
echo "✓ Dump créé: seafile-all-$DATE.sql ($SIZE)"
else
echo "❌ Échec du dump (timeout ou erreur mysqldump)"
exit 1
fi
# Nettoyer les anciens dumps (garder 7 jours)
DELETED=$(find "$BACKUP_DIR" -name "*.sql" -mtime +7 -delete -print | wc -l)
if [ "$DELETED" -gt 0 ]; then
echo "🗑️ $DELETED ancien(s) dump(s) supprimé(s)"
fi
echo "[$(date)] ✅ Dump MySQL Seafile terminé avec succès"
exit 0