añadido script para backup

This commit is contained in:
2026-07-19 16:27:22 +02:00
parent e40536023d
commit 449667fc80
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Backup diario. Se ejecuta EN EL SERVIDOR (cron): dump consistente de MySQL
# con el contenedor vivo + copia de .env, en /srv/backups/may, que es la
# carpeta que zerobyte monta por SSH desde la otra máquina.
# Instalación, zerobyte y restauración: SIGUIENTES-PASOS.md → "Backups".
set -euo pipefail
umask 077
BACKUP_DIR=/srv/backups/may
APP_DIR=$(cd "$(dirname "$0")/.." && pwd)
STAMP=$(date +%F_%H%M)
mkdir -p "$BACKUP_DIR/mysql" "$BACKUP_DIR/config"
# --single-transaction: snapshot InnoDB consistente sin bloquear ni parar nada.
# MYSQL_PWD se expande DENTRO del contenedor (comillas simples): la contraseña
# no pasa por este script ni por la lista de procesos del host.
TMP="$BACKUP_DIR/mysql/.easyappointments_$STAMP.part"
docker exec may-ea-mysql sh -c \
'MYSQL_PWD="$MYSQL_ROOT_PASSWORD" exec mysqldump --single-transaction --quick \
--routines --triggers --events --databases easyappointments' > "$TMP"
grep -q 'Dump completed' "$TMP" # mysqldump lo escribe al final: si falta, quedó truncado
mv "$TMP" "$BACKUP_DIR/mysql/easyappointments_$STAMP.sql"
# Lo único necesario para restaurar que no está en git.
install -m 600 "$APP_DIR/.env" "$BACKUP_DIR/config/env"
# Retención local corta; el histórico largo son los snapshots de zerobyte.
find "$BACKUP_DIR/mysql" -name '*.sql' -mtime +7 -delete
find "$BACKUP_DIR/mysql" -name '.*.part' -mtime +1 -delete
echo "$(date -Is) OK easyappointments_$STAMP.sql"