Post

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.

RolServicioImpacto si falla
Dump SQLBBDD NextcloudLos datos de aplicacion no son recuperables al mismo punto
ConsistenciaNextcloudCopia con cambios en curso o modo mantenimiento mal cerrado
Base de restoreMigracionesNo 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

  1. Escribe log diario.
  2. Entra en el directorio de Nextcloud.
  3. Activa modo mantenimiento con occ.
  4. Ejecuta mysqldump de la base de datos Nextcloud.
  5. Guarda una copia en destino local de backups SQL.
  6. Guarda otra copia en una ruta origen auxiliar para sincronizacion posterior.
  7. 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.cnf con permisos 600.
  • Validar que el dump no queda vacio.
  • Comprimir dumps antiguos.

Cambios y motivo

CambioMotivo
--defaults-extra-fileevita pasar password en la linea de comandos
trap para desactivar mantenimientogarantiza que Nextcloud no quede bloqueado si falla el dump
variables para rutas y BBDDfacilita mover el script entre hosts sin tocar toda la logica
set -euo pipefailcorta la ejecucion ante errores no controlados
This post is licensed under CC BY 4.0 by the author.