Backups Automáticos con rsync

por | Feb 4, 2026 | Automatización, Bash, Infraestructura, Scripts, Tools

Administrar un servidor Nextcloud implica algo más que mantener el servicio funcionando. Una de las responsabilidades más importantes es asegurar que toda la información almacenada pueda recuperarse ante cualquier problema, ya sea un fallo del sistema, un error humano o un problema en el almacenamiento. Para lograrlo es fundamental contar con una estrategia de copias de seguridad fiable, que incluya tanto los archivos del sistema como la base de datos y los datos de los usuarios.

Vamos a ver cómo realizar una copia de seguridad completa de Nextcloud. Primero realizaremos el proceso de forma manual para entender qué elementos deben respaldarse, y luego automatizaremos todo el procedimiento mediante un script en Bash ejecutado automáticamente con cron.

Backup manual de Nextcloud

Antes de realizar una copia de seguridad es recomendable activar el modo mantenimiento para evitar cambios en los archivos o en la base de datos durante el proceso.

Bash
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

Este comando ejecuta la herramienta OCC de Nextcloud como el usuario www-data y activa el modo mantenimiento, bloqueando temporalmente el acceso de usuarios.

Crear estructura de backups

Bash
sudo mkdir -p /backups/nextcloud/{data,app,db}

Esto crea la estructura de carpetas donde se almacenarán los backups.

/backups/nextcloud
 ├── data
 ├── app
 └── db

Backup de la base de datos

Bash
sudo mysqldump -u nextclouduser -p nextcloud | sudo tee /backups/nextcloud/db/nextcloud.sql > /dev/null

Este comando realiza el respaldo de la base de datos.

mysqldump
Exporta la base de datos completa en formato SQL.

-u nextclouduser
Usuario de la base de datos.

-p
Solicita la contraseña.

nextcloud
Nombre de la base de datos.

tee
Guarda la salida en el archivo SQL.

/dev/null
Evita mostrar el contenido del dump en pantalla.

Backup de los datos de usuarios

Bash
sudo rsync -Aax /var/www/nextcloud/data/ /backups/nextcloud/data/

Esto copia todos los datos de usuarios.

rsync es una herramienta eficiente para sincronizar archivos.

Opciones utilizadas:

-A
Preserva ACLs (permisos avanzados).

-a
Modo archivo (preserva permisos, fechas y estructura).

-x
Evita cruzar otros sistemas de archivos.

Backup de la aplicación

Bash
sudo rsync -Aax /var/www/nextcloud/ /backups/nextcloud/app/

Esto respalda:

  • Código de Nextcloud.
  • Configuración.
  • Aplicaciones instaladas.

Desactivar modo mantenimiento

Bash
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

Al terminar veriamos algo asi en nuestro backup:

Automatización del backup con script

Para evitar realizar el proceso manualmente podemos crear un script.

Creamos el script:

Bash
sudo nano /usr/local/bin/backup_script.sh

Contenido del script:

Bash
#!/bin/bash

# Rutas
NC_PATH="/var/www/nextcloud"
DATA_PATH="/srv/nextcloud-data"
BACKUP_PATH="/backups/nextcloud"
DB_USER="usernextcloud"
DB_NAME="nextcloud"

DATE=$(date +"%Y-%m-%d_%H-%M")

# Crear estructura de backup si no existe
mkdir -p $BACKUP_PATH/db
mkdir -p $BACKUP_PATH/data
mkdir -p $BACKUP_PATH/app

# Activar mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --on

# Backup base de datos
sudo mysqldump -u $DB_USER $DB_NAME | sudo tee $BACKUP_PATH/db/nextcloud_$DATE.sql > /dev/null

# Backup datos
sudo rsync -Aax $DATA_PATH/ $BACKUP_PATH/data/

# Backup app
sudo rsync -Aax $NC_PATH/ $BACKUP_PATH/app/

# Desactivar mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --off

Explicación del script

Variables

Bash
NC_PATH="/var/www/nextcloud"

Ruta donde está instalada la aplicación.

DATA_PATH="/srv/nextcloud-data"

Directorio donde se almacenan los archivos de los usuarios.

BACKUP_PATH="/backups/nextcloud"

Directorio donde se guardarán las copias de seguridad.

Variable de fecha

Bash
DATE=$(date +"%Y-%m-%d_%H-%M")

Genera un timestamp para que cada backup tenga un nombre único.

Ejemplo:

nextcloud_2026-03-06_02-30.sql

Activar modo mantenimiento

Bash
sudo -u www-data php $NC_PATH/occ maintenance:mode --on

Bloquea accesos mientras se realiza el backup.

Backup de base de datos

Bash
sudo mysqldump -u $DB_USER $DB_NAME

Exporta la base de datos.

tee $BACKUP_PATH/db/nextcloud_$DATE.sql

Guarda el dump en el directorio de backups.

Backup de datos

Bash
rsync -Aax $DATA_PATH/ $BACKUP_PATH/data/

Copia todos los archivos de usuarios preservando permisos.

Backup de la aplicación

Bash
rsync -Aax $NC_PATH/ $BACKUP_PATH/app/

Guarda el código de Nextcloud.

Desactivar mantenimiento

Bash
sudo -u www-data php $NC_PATH/occ maintenance:mode --off

Restaura el acceso al sistema.

Autenticación de MySQL sin contraseña

Para evitar introducir la contraseña manualmente en cada backup o que al ejecutarse produzca algún tipo de error podemos crear un archivo de configuración:

Bash
sudo nano /root/.my.cnf

Contenido:

INI
[client]
user=(userdb)
password=(pass)

Esto permite que herramientas como mysqldump utilicen automáticamente esas credenciales.

Es importante restringir los permisos:

Bash
sudo chmod 600 /root/.my.cnf

Automatizar el backup con Cron

Ahora podemos programar el script para que se ejecute automáticamente.

Editar el crontab:

Bash
sudo crontab -e

Ejemplo:

Bash
*/2 * * * * /usr/local/bin/backup_script.sh >> /var/log/nextcloud_backup.log 2>&1

Explicación:

*/2

Ejecuta el script cada 2 minutos.

>> /var/log/nextcloud_backup.log

Guarda la salida en un archivo de log.

2>&1

Redirige los errores al mismo log.

Verificar logs del backup

Para revisar la ejecución:

Bash
sudo tail -n 50 /var/log/nextcloud_backup.log

Esto mostrará las últimas líneas del log.

Estructura final de backups

/backups/nextcloud
├── app
├── data
└── db
     └── nextcloud_2026-03-06_02-30.sql

Conclusión

Automatizar las copias de seguridad de Nextcloud permite:

  • Proteger datos críticos.
  • Evitar pérdida de información.
  • Reducir intervención manual.
  • Mantener una estrategia de recuperación ante desastres.

Implementar este sistema con rsync + mysqldump + cron es una solución simple, eficiente y ampliamente utilizada en entornos de administración de servidores.

GabrielGR

Categorías

Etiquetas

Te pueden interesar

Te pueden interesar

Categorías

Etiquetas