dumpea.sh
dumpea.sh
dumpea.sh
Este script pone Nextcloud en modo mantenimiento, genera dumps SQL de la base de datos y vuelve a activar el servicio.
Uso en la infraestructura
Se usa para generar el punto de recuperacion de la BBDD Nextcloud, imprescindible para restaurar usuarios, shares, metadatos y configuracion interna.
| Rol | Servicio | Impacto si falla |
|---|---|---|
| Dump SQL | BBDD Nextcloud | Los datos de aplicacion no son recuperables al mismo punto |
| Consistencia | Nextcloud | Copia con cambios en curso o modo mantenimiento mal cerrado |
| Base de restore | Migraciones | No se puede levantar una instancia equivalente |
Debe validarse que el SQL resultante no esta vacio y que el modo mantenimiento se desactiva incluso si falla el dump.
Ejecucion programada
10 0 * * * /ruta/origen/scripts/dumpea.sh
Flujo
- Escribe log diario.
- Entra en el directorio de Nextcloud.
- Activa modo mantenimiento con
occ. - Ejecuta
mysqldumpde la base de datos Nextcloud. - Guarda una copia en destino local de backups SQL.
- Guarda otra copia en una ruta origen auxiliar para sincronizacion posterior.
- Desactiva modo mantenimiento.
Script original
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
LOG=/var/log/dumpea.log
logline() {
echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >> "$LOG"
}
FECHA=D$(date +%Y%m%d)
logline "Inicia Dumpeo a fecha de:" > $LOG
date
cd /ruta/origen/nextcloud
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --on
mysqldump --user=<USUARIO_DB> --password=<PASSWORD_DB> <BBDD_NEXTCLOUD> > /ruta/destino/sqls/bck_nextcloud_nextcloud_db.sql.$FECHA
mysqldump --user=<USUARIO_DB> --password=<PASSWORD_DB> <BBDD_NEXTCLOUD> > /ruta/destino/sqls/bck_nextcloud_nextcloud_db.sql
cd /ruta/origen/nextcloud
sudo -u www-data php --define apc.enable_cli=1 occ maintenance:mode --off
logline "Dumpeo finalizado"
exit 0
Version revisada
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env bash
set -euo pipefail
LOG="/var/log/dumpea_$(date +%Y%m%d).log"
FECHA="$(date +%Y%m%d)"
NEXTCLOUD_DIR="/ruta/origen/nextcloud-app"
DESTINO_SQL="/ruta/destino/backups/sql"
DESTINO_SYNC="/ruta/destino/sync/sql"
MYSQL_CNF="/ruta/segura/mysql.cnf"
DB_NAME="<BBDD_NEXTCLOUD>"
sudo -u www-data php --define apc.enable_cli=1 "$NEXTCLOUD_DIR/occ" maintenance:mode --on
trap 'sudo -u www-data php --define apc.enable_cli=1 "$NEXTCLOUD_DIR/occ" maintenance:mode --off' EXIT
mysqldump --defaults-extra-file="$MYSQL_CNF" "$DB_NAME" > "$DESTINO_SQL/bck_nextcloud_${FECHA}.sql"
cp "$DESTINO_SQL/bck_nextcloud_${FECHA}.sql" "$DESTINO_SYNC/bck_nextcloud.sql"
Recomendaciones
- Guardar credenciales en
/ruta/segura/mysql.cnfcon permisos600. - Validar que el dump no queda vacio.
- Comprimir dumps antiguos.
Cambios y motivo
| Cambio | Motivo |
|---|---|
--defaults-extra-file | evita pasar password en la linea de comandos |
trap para desactivar mantenimiento | garantiza que Nextcloud no quede bloqueado si falla el dump |
| variables para rutas y BBDD | facilita mover el script entre hosts sin tocar toda la logica |
set -euo pipefail | corta la ejecucion ante errores no controlados |
This post is licensed under CC BY 4.0 by the author.