#!/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 # Utilisateur MySQL (par défaut root, configurable via .env) MYSQL_USER="${SEAFILE_MYSQL_USER:-root}" # 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 "✓ Utilisateur MySQL: $MYSQL_USER" 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 "$MYSQL_USER" -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