Cómo automatizar el backup de tu servidor de MU Online a Google Drive
Configura un pipeline automático que genera el dump de la base de datos y de los archivos críticos del servidor de MU Online y los envía a Google Drive vía rclone, con rotación, cifrado y alertas de falla.
Perder la base de datos de un servidor de MU Online — con cuentas, personajes, ítems e historial de compras — es el tipo de incidente que puede terminar un proyecto de la noche a la mañana. Aun así, es común ver administradores haciendo backup manual "cuando se acuerdan", lo cual es solo cuestión de
Perder la base de datos de un servidor de MU Online — con cuentas, personajes, ítems e historial de compras — es el tipo de incidente que puede terminar un proyecto de la noche a la mañana. Aun así, es común ver administradores haciendo backup manual "cuando se acuerdan", lo cual es solo cuestión de tiempo hasta que salga mal. Este tutorial arma un pipeline completo y automatizado: dump de la base, compresión, cifrado opcional, envío a Google Drive vía rclone, rotación de versiones antiguas y alerta en caso de falla — todo programado para correr solo todos los días.
Por qué la nube es parte esencial de la estrategia de backup
La regla clásica de backup es 3-2-1: tres copias de los datos, en dos tipos de medios diferentes, con una copia fuera del sitio (off-site). Un backup que queda solo en el mismo disco del servidor de producción no protege contra falla de hardware, ransomware o error de operación que borra todo. Google Drive cumple el rol de copia off-site, con costo bajo e integración simple vía rclone.
Visión general del pipeline
El flujo completo tiene cinco etapas, ejecutadas en secuencia por un único script programado:
| Etapa | Acción | Herramienta |
|---|---|---|
| 1 | Dump de la base de datos | mysqldump / sqlcmd |
| 2 | Copia de los archivos críticos (configs, logs recientes) | tar/zip |
| 3 | Compresión y (opcional) cifrado | gzip, gpg |
| 4 | Envío a Google Drive | rclone |
| 5 | Rotación (borrar backups antiguos locales y remotos) | script propio |
Instalando y configurando rclone
rclone es la herramienta estándar para sincronizar archivos con decenas de proveedores de nube, incluido Google Drive, sin necesidad de credenciales expuestas en texto plano en el script.
curl https://rclone.org/install.sh | sudo bash
rclone config
En el asistente interactivo, elegí n para nuevo remote, ponele el nombre gdrive_mu, seleccioná el tipo drive (Google Drive) y seguí el flujo de autenticación OAuth en el navegador. Al final, confirmá el funcionamiento:
rclone lsd gdrive_mu:
Si lista las carpetas de tu cuenta de Google Drive, la configuración está correcta.
Generando el dump de la base de datos
Para MySQL/MariaDB (común en MuEMU y derivados), usá --single-transaction para no bloquear tablas en uso durante el dump:
mysqldump --single-transaction --routines --triggers \
-u backup_user -p"$DB_PASS" mu_online > /backup/mu_$(date +%F).sql
Para SQL Server (común en servidores IGCN), usá sqlcmd con un BACKUP DATABASE directo a un archivo .bak:
BACKUP DATABASE MuOnline
TO DISK = 'C:\Backup\MuOnline_20260730.bak'
WITH COMPRESSION, INIT;
Creá un usuario de base de datos dedicado a backups (backup_user), con permiso solo de lectura y BACKUP, nunca el usuario administrativo del GameServer — esto reduce el riesgo en caso de filtración del script.
Empaquetando archivos de configuración críticos
Además de la base de datos, conviene incluir en el backup los archivos de configuración del GameServer/ConnectServer (que rara vez cambian, pero salen caro de reconstruir desde cero) y los últimos días de log:
tar -czf /backup/config_$(date +%F).tar.gz \
/srv/muserver/Data/*.txt \
/srv/muserver/Data/*.xml \
/srv/muserver/logs/*.log
Cifrando el backup antes del envío
Como el dump contiene datos sensibles (contraseñas con hash, historial de compras, correos de jugadores), es recomendable cifrarlo antes de enviarlo a la nube, aunque Google Drive ya sea privado por defecto:
gpg --symmetric --cipher-algo AES256 --batch --passphrase "$BACKUP_PASSPHRASE" \
/backup/mu_$(date +%F).sql
Esto genera un archivo .gpg que solo se puede abrir con la contraseña definida — guardá esa contraseña en una bóveda separada del servidor (gestor de contraseñas del equipo), nunca en el mismo script.
Enviando a Google Drive
Con los archivos listos, el envío es una sola línea:
rclone copy /backup/ gdrive_mu:mu-backups/$(date +%Y-%m)/ --progress
Organizar por carpeta de mes (2026-07/) facilita la navegación manual en Drive cuando haga falta ubicar un backup específico rápidamente.
Script completo de backup diario
Juntando las etapas en un único script (backup_diario.sh):
#!/bin/bash
set -e
DATA=$(date +%F)
BACKUP_DIR=/backup
DB_DUMP="$BACKUP_DIR/mu_$DATA.sql"
mysqldump --single-transaction -u backup_user -p"$DB_PASS" mu_online > "$DB_DUMP"
tar -czf "$BACKUP_DIR/config_$DATA.tar.gz" /srv/muserver/Data/*.txt /srv/muserver/Data/*.xml
gpg --symmetric --cipher-algo AES256 --batch --passphrase "$BACKUP_PASSPHRASE" "$DB_DUMP"
rm -f "$DB_DUMP"
rclone copy "$BACKUP_DIR/" gdrive_mu:mu-backups/$(date +%Y-%m)/ --progress
echo "Backup de $DATA concluido con éxito." >> /var/log/mu/backup.log
Rotación: borrando backups antiguos
Mantener todos los backups para siempre agota el espacio rápidamente. Un esquema común es retener los últimos 7 backups diarios y borrar el resto, tanto localmente como en Drive:
find /backup -name "*.gpg" -mtime +7 -delete
rclone delete gdrive_mu:mu-backups/ --min-age 90d
| Frecuencia | Retención sugerida | Ubicación |
|---|---|---|
| Diario | 7 días | Local + Drive |
| Semanal | 30 días | Drive |
| Mensual | 6 a 12 meses | Drive |
Alertando en caso de falla
Un backup que falla en silencio es peor que no tener backup — da una falsa sensación de seguridad. Agregá un trap en el script para notificar en caso de error, reutilizando el mismo webhook de Discord/Telegram usado en los avisos de evento:
trap 'curl -s -X POST "$DISCORD_WEBHOOK_URL" -d "{\"content\":\"⚠️ ¡Falla en el backup diario de MU Online!\"}" -H "Content-Type: application/json"' ERR
Programando la ejecución automática
En Linux, programalo vía cron para que corra de madrugada, fuera del horario pico de jugadores:
0 4 * * * /usr/local/bin/backup_diario.sh >> /var/log/mu/backup_cron.log 2>&1
En Windows, usá el Programador de Tareas apuntando a un .bat que llame a rclone y sqlcmd, con un disparador diario a las 04:00.
Probando la restauración periódicamente
Un backup nunca probado es una apuesta. Cada mes, descargá el archivo más reciente y restauralo en un entorno de prueba aislado (nunca en producción) para validar que el proceso completo funciona de punta a punta:
rclone copy gdrive_mu:mu-backups/2026-07/mu_2026-07-30.sql.gpg /tmp/teste/
gpg --decrypt --batch --passphrase "$BACKUP_PASSPHRASE" /tmp/teste/mu_2026-07-30.sql.gpg > /tmp/teste/mu_restaurado.sql
mysql -u root -p mu_teste < /tmp/teste/mu_restaurado.sql
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
rclone copy falla con error de autenticación | Token OAuth vencido | Ejecutá rclone config reconnect gdrive_mu: |
| El dump de MySQL bloquea tablas en producción | Faltó --single-transaction | Agregá el flag al comando de dump |
| El backup consume todo el espacio en disco | Rotación local no configurada | Agregá find ... -delete al script |
| Nadie nota que el backup dejó de correr | Falta de alerta de falla | Implementá trap con webhook de notificación |
El archivo .gpg no se desencripta | Contraseña distinta a la usada en el cifrado | Centralizá la contraseña en una única bóveda documentada |
| El cron no ejecuta | Permiso de ejecución ausente en el script | Ejecutá chmod +x backup_diario.sh |
Lista de verificación de backup automatizado
rcloneinstalado y remote de Google Drive configurado y probado.- Usuario de base de datos dedicado a backup, con permisos mínimos.
- Script de dump + compresión + cifrado funcionando manualmente.
- Envío a Google Drive validado con
rclone lsd. - Rotación local y remota configurada.
- Alerta de falla vía Discord/Telegram implementada.
- Programación diaria confirmada (cron o Programador de Tareas).
- Restauración probada en entorno aislado en el último mes.
Con el backup corriendo solo y probado, la mayor fuente de riesgo operativo de tu servidor deja de ser "olvidarse de guardar" y pasa a ser solo monitorear las alertas. Si todavía estás armando la infraestructura desde cero, volvé al tutorial de creación de servidor de MU Online para garantizar que la base es sólida antes de automatizar el resto.
Preguntas frecuentes
¿Por qué usar Google Drive y no solo un backup local?
El backup local protege contra corrupción de datos o error de operación, pero no contra una falla del disco físico, robo del servidor o incendio en el datacenter. Google Drive (o cualquier nube) garantiza una copia fuera del lugar físico del servidor, esencial en la regla 3-2-1 de backup.
¿rclone es gratuito?
Sí, rclone es una herramienta open source y gratuita. El costo, si lo hay, es solo del almacenamiento en Google Drive por encima de la cuota gratuita (15 GB), que se puede ampliar con un plan Google One.
¿Necesito detener el servidor para hacer el backup?
No es obligatorio si usás un dump consistente de la base de datos (mysqldump con --single-transaction, o snapshot de MSSQL). Detener el servidor por unos segundos es más seguro en entornos pequeños, pero no es necesario en producción con los flags correctos.
¿Cómo restauro un backup de Google Drive en caso de emergencia?
Descargá el archivo más reciente con rclone copy, desencriptalo (si aplica) y restaurá el dump SQL con el comando de importación correspondiente (mysql < dump.sql o RESTORE DATABASE en MSSQL). Probá este proceso periódicamente para garantizar que el backup realmente funciona.
¿Cuántas copias de backup debo mantener?
Una práctica común es mantener backups diarios de los últimos 7 días, semanales de los últimos 30 días y mensuales de los últimos 6 a 12 meses. Esto equilibra el espacio en disco/nube con la capacidad de recuperación de errores descubiertos tardíamente.