diff --git a/hooks/seafile-docker-mysql-backup.sh b/hooks/seafile-docker-mysql-backup.sh index d7c0487..567892b 100644 --- a/hooks/seafile-docker-mysql-backup.sh +++ b/hooks/seafile-docker-mysql-backup.sh @@ -1,47 +1,62 @@ #!/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 si nécessaire +# 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 -# Option A: Si MySQL est dans le conteneur Seafile -#docker exec "$SEAFILE_CONTAINER" mysqldump \ -# -u seafile -p"${SEAFILE_DB_PASSWORD:-votre_mot_de_passe}" \ -# --single-transaction --quick \ -# ccnet_db >"$BACKUP_DIR/ccnet_db-$DATE.sql" -# -#docker exec "$SEAFILE_CONTAINER" mysqldump \ -# -u seafile -p"${SEAFILE_DB_PASSWORD}" \ -# --single-transaction --quick \ -# seafile_db >"$BACKUP_DIR/seafile_db-$DATE.sql" -# -#docker exec "$SEAFILE_CONTAINER" mysqldump \ -# -u seafile -p"${SEAFILE_DB_PASSWORD}" \ -# --single-transaction --quick \ -# seahub_db >"$BACKUP_DIR/seahub_db-$DATE.sql" - -# Option B: Si MySQL est dans un conteneur séparé (décommentez si c'est le cas) -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" - -# Vérifier que les dumps sont créés -if [ -f "$BACKUP_DIR/ccnet_db-$DATE.sql" ]; then - echo "✓ Dumps MySQL Seafile créés avec succès" - # Nettoyer les anciens dumps (garder 7 jours) - find "$BACKUP_DIR" -name "*.sql" -mtime +7 -delete -else - echo "✗ Erreur lors de la création des dumps MySQL" +# 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