El mayor portal de MU Online de Brasil — desde 2003
Tutorial Intermedio Tutoriais

Cómo Hacer Backup Automático del Servidor de MU en la Nube

Aprende a automatizar el backup de tu servidor MU Online S6 en la nube con scripts, programación de tareas y mejores prácticas de seguridad de datos.

EQ Equipo ViciadosMU · Actualizado el 4 jul 2026 · ⏱ 12 min de lectura

Por Qué Automatizar el Backup del Servidor de MU Online

Administrar un servidor de MU Online Season 6 implica un ecosistema complejo de datos: la base de datos SQL Server con cuentas, personajes, inventarios, progreso de quests, registros del Castle Siege, datos de guildas y transacciones de zen. Perder esa base de datos — ya sea por falla de hardware, corrupción o error humano — significa perder todo el historial del servidor.

La automatización del backup resuelve el principal problema de los administradores: la disciplina. El backup manual funciona mientras lo recuerdas. Un sistema automatizado funciona mientras el servidor está encendido. La diferencia entre los dos puede determinar la supervivencia de tu proyecto.

En este tutorial configurarás un flujo completo de backup automático: generación del archivo, compresión, envío a almacenamiento en la nube y rotación de archivos antiguos.

Nota: Este tutorial cubre servidores basados en SQL Server 2008, 2014 y 2019, que son las versiones más comunes para servidores MU S6. Los scripts PowerShell y T-SQL funcionan en todas estas versiones con mínimas diferencias de sintaxis.

Entendiendo Qué Necesita Ser Guardado

Antes de automatizar cualquier cosa, es fundamental saber qué guardar. Un servidor MU S6 típico tiene dos categorías de datos críticos.

Base de Datos SQL Server

El núcleo del servidor. La base MuOnline (o el nombre que configuraste) contiene:

  • Tabla Character — todos los personajes, incluyendo clase (Dark Knight, Dark Wizard, Fairy Elf, Magic Gladiator, Dark Lord, Summoner), nivel, stats (STR, AGI, VIT, ENE, CMD para Dark Lord), conteo de resets
  • Tabla AccountCharacter — vínculo entre cuentas y personajes
  • Tabla Inventory — ítems equipados y en el inventario de cada personaje
  • Tablas Guild y GuildMember — estructura completa de guildas
  • Tablas de evento — registros del Castle Siege, Crywolf Fortress, Blood Castle, Devil Square
  • Tabla MuCash / VIP — si el servidor tiene sistema de puntos o VIP

Archivos de Configuración del GameServer

Estos archivos no están en la base de datos y frecuentemente son olvidados:

GameServer\
  └── Data\
        ├── Monster\          → spots y drops personalizados por mapa
        ├── MapServerInfo.txt → configuraciones de mapa (Lorencia, Noria, Devias, Dungeon,
        │                       Lost Tower, Atlans, Tarkan, Icarus, Aida, Karutan,
        │                       Kanturu, Kalima, Land of Trials, Crywolf Fortress,
        │                       Raklion, Vulcanus, Acheron)
        ├── Item\             → drops y atributos de ítems personalizados
        └── *.ini / *.xml     → archivos de configuración general del servidor
Atenção: Si personalizaste spots de monstruos en Tarkan o Aida, editaste drops de Land of Trials o configuraste eventos en Crywolf Fortress, esos datos están en los archivos .txt del GameServer — no en la base SQL. Un backup solo del SQL no recuperará esas configuraciones.

Configurando el Backup Automático del SQL Server

Paso 1 — Crear el Script T-SQL de Backup

Abre SQL Server Management Studio (SSMS) y crea un procedimiento de backup. Este script usa compresión nativa y guarda en una carpeta local antes del envío a la nube.

-- Procedure: sp_BackupMuOnline
-- Crea un backup comprimido con timestamp en el nombre del archivo

USE master;
GO

CREATE PROCEDURE sp_BackupMuOnline
    @BackupPath NVARCHAR(500) = 'D:\Backups\MuOnline\'
AS
BEGIN
    DECLARE @FileName    NVARCHAR(600)
    DECLARE @DateStamp   NVARCHAR(20)
    DECLARE @FullPath    NVARCHAR(700)

    -- Formato: MuOnline_20240115_0300.bak
    SET @DateStamp = CONVERT(NVARCHAR(8), GETDATE(), 112)
                   + '_'
                   + REPLACE(CONVERT(NVARCHAR(5), GETDATE(), 108), ':', '')

    SET @FileName = 'MuOnline_' + @DateStamp + '.bak'
    SET @FullPath = @BackupPath + @FileName

    BACKUP DATABASE [MuOnline]
        TO DISK = @FullPath
        WITH
            COMPRESSION,          -- reduce el tamaño hasta un 80%
            CHECKSUM,             -- valida integridad durante el backup
            FORMAT,
            STATS = 10,           -- progreso cada 10%
            NAME = N'Backup automatico ViciadosMU';

    -- Registra el backup en la tabla de log
    INSERT INTO MuOnline.dbo.BackupLog (FechaHora, Archivo, Estado)
    VALUES (GETDATE(), @FileName, 'OK');

    PRINT 'Backup completado: ' + @FullPath;
END;
GO
Dica: Crea la tabla BackupLog en la base MuOnline para tener un historial de cuándo se ejecutó cada backup. Si algún día el servidor se cuelga a la hora del backup, sabrás exactamente cuál fue el último exitoso.

Paso 2 — Programar via SQL Server Agent

En SSMS, expande SQL Server Agent → Jobs → New Job. Configura:

  • Nombre: Backup_Automatico_MuOnline
  • Step 1: T-SQL, ejecuta EXEC sp_BackupMuOnline
  • Schedule: Diario a las 03:00 (menor tráfico de jugadores)

Para backups incrementales cada 6 horas, crea un segundo schedule con frecuencia de 6 horas para un backup del transaction log (modo de recuperación Full requerido).


Enviando a la Nube con PowerShell

Con el archivo .bak guardado localmente, el siguiente paso es enviarlo automáticamente a almacenamiento en la nube. PowerShell nativo de Windows se integra con las principales opciones sin necesidad de software adicional.

Usando rclone para Múltiples Proveedores

rclone es una herramienta de línea de comandos gratuita y de código abierto que se conecta a Google Drive, Mega, Dropbox, OneDrive, servicios compatibles con S3 y decenas más. Es la opción más versátil para servidores MU.

# Script: BackupMuNube.ps1
# Ejecuta el backup SQL y lo sube a la nube via rclone

param(
    [string]$BackupDir    = "D:\Backups\MuOnline\",
    [string]$RcloneDest   = "gdrive:Backups/MuOnline/",   # ajusta a tu remote
    [int]$DiasRetencion   = 7   # elimina backups locales con mas de 7 dias
)

$LogFile = "D:\Backups\Logs\backup_$(Get-Date -Format 'yyyyMM').log"

function Write-Log {
    param([string]$Msg)
    $line = "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $Msg"
    Write-Host $line
    Add-Content -Path $LogFile -Value $line
}

Write-Log "=== Iniciando backup automatico MuOnline ==="

# 1 → Ejecuta el backup en SQL Server
Write-Log "Generando backup de la base de datos..."
$SqlResult = sqlcmd -S localhost -Q "EXEC sp_BackupMuOnline" -b
if ($LASTEXITCODE -ne 0) {
    Write-Log "ERROR: Fallo el backup SQL. Codigo: $LASTEXITCODE"
    exit 1
}
Write-Log "Backup SQL completado con exito."

# 2 → Identifica el archivo mas reciente
$Archivo = Get-ChildItem -Path $BackupDir -Filter "*.bak" |
           Sort-Object LastWriteTime -Descending |
           Select-Object -First 1

if (-not $Archivo) {
    Write-Log "ERROR: No se encontro archivo .bak en $BackupDir"
    exit 1
}
Write-Log "Archivo para enviar: $($Archivo.Name) ($([math]::Round($Archivo.Length/1MB,2)) MB)"

# 3 → Sube a la nube con rclone
Write-Log "Subiendo a la nube: $RcloneDest"
& rclone copy $Archivo.FullName $RcloneDest --progress --log-level INFO

if ($LASTEXITCODE -ne 0) {
    Write-Log "ERROR: Fallo la subida. Verifica la configuracion de rclone."
    exit 1
}
Write-Log "Subida completada con exito."

# 4 → Elimina backups locales antiguos (rotacion)
Write-Log "Eliminando backups locales con mas de $DiasRetencion dias..."
$Corte = (Get-Date).AddDays(-$DiasRetencion)
$Antiguos = Get-ChildItem -Path $BackupDir -Filter "*.bak" |
            Where-Object { $_.LastWriteTime -lt $Corte }

foreach ($f in $Antiguos) {
    Remove-Item $f.FullName -Force
    Write-Log "Eliminado: $($f.Name)"
}

Write-Log "Rotacion completada. Backups eliminados: $($Antiguos.Count)"
Write-Log "=== Backup finalizado con exito ==="

Configurando rclone

Después de instalar rclone, ejecuta rclone config y sigue el asistente para configurar tu proveedor. Para Google Drive:

rclone config
→ n (nuevo remote)
→ Nombre: gdrive
→ Tipo: drive (Google Drive)
→ Sigue el flujo de autenticacion OAuth en el navegador
→ Confirma la configuracion

Para probar: rclone lsd gdrive: debería listar las carpetas de tu Google Drive.


Programando el Script en el Programador de Tareas de Windows

Con el script PowerShell listo, programa su ejecución automática:

  1. Abre Programador de Tareas (taskschd.msc)
  2. Haz clic en Crear Tarea Básica
  3. Configura:
  • Nombre: BackupMuOnlineNube
  • Disparador: Diario a las 03:30 (30 minutos después del backup SQL)
  • Acción: Iniciar un programa
  • Programa: powershell.exe
  • Argumentos: -NonInteractive -ExecutionPolicy Bypass -File "D:\Scripts\BackupMuNube.ps1"
  1. En Condiciones, desmarca "Iniciar la tarea solo si el equipo tiene alimentación de CA" (el VPS funciona 24h)
  2. En Configuración, marca "Ejecutar la tarea tan pronto como sea posible si se pierde un inicio programado"
Dica: Configura el Programador de Tareas para usar una cuenta de servicio dedicada (no la cuenta Administrador principal). Esto aísla los permisos del proceso de backup y facilita la auditoría. En el campo "Ejecutar como usuario", crea un usuario svc_backup con acceso solo a las carpetas necesarias.

Estrategia de Retención y Organización en la Nube

Mantener todos los backups para siempre consume espacio y dificulta encontrar el archivo correcto en una emergencia. Usa una estrategia por capas:

gdrive:Backups/MuOnline/
  ├── diario/    → ultimos 7 dias (reemplazados por la rotacion del script)
  ├── semanal/   → 1 backup por semana, retenidos por 4 semanas
  └── mensual/   → 1 backup por mes, retenidos por 6 meses

Para poblar automáticamente las carpetas semanal y mensual, agrega al script PowerShell:

# Al final del script, despues de la subida exitosa:

# Backup semanal (todos los lunes)
if ((Get-Date).DayOfWeek -eq 'Monday') {
    & rclone copy $Archivo.FullName "gdrive:Backups/MuOnline/semanal/" --progress
    Write-Log "Backup semanal subido."
}

# Backup mensual (cada dia 1)
if ((Get-Date).Day -eq 1) {
    & rclone copy $Archivo.FullName "gdrive:Backups/MuOnline/mensual/" --progress
    Write-Log "Backup mensual subido."
}

Probando la Restauración

Un backup que nunca se ha probado puede ser inútil. Reserva tiempo una vez al mes para probar la restauración:

-- Restaura la base en un entorno de prueba (NUNCA en el servidor de produccion)
-- Primero, pon la base de destino fuera de linea o usa un nombre diferente

RESTORE DATABASE [MuOnline_Prueba]
FROM DISK = 'D:\Backups\MuOnline\MuOnline_20240115_0300.bak'
WITH
    MOVE 'MuOnline' TO 'D:\TestDB\MuOnline_Prueba.mdf',
    MOVE 'MuOnline_log' TO 'D:\TestDB\MuOnline_Prueba_log.ldf',
    REPLACE,
    STATS = 10;

-- Valida la integridad sin restaurar (mas rapido para verificacion rutinaria)
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\MuOnline\MuOnline_20240115_0300.bak'
WITH CHECKSUM;
Atenção: Nunca ejecutes RESTORE DATABASE apuntando a la base de produccion mientras el servidor MU está funcionando. Esto derrumbará el GameServer y corrompera datos. Usa siempre una base con nombre diferente (ej: MuOnline_Prueba) para pruebas de restauración.

Monitoreo y Alertas

Configura alertas por correo electrónico para saber cuándo falla un backup:

# Agrega al final del script, en el bloque de manejo de errores:

function Envia-AlertaEmail {
    param([string]$Asunto, [string]$Cuerpo)

    $ServidorSmtp = "smtp.gmail.com"
    $Puerto       = 587
    $De           = "[email protected]"
    $Para         = "[email protected]"

    $Credencial = New-Object PSCredential(
        $De,
        (ConvertTo-SecureString "TU_CONTRASENA_APP" -AsPlainText -Force)
    )

    Send-MailMessage `
        -SmtpServer $ServidorSmtp `
        -Port $Puerto `
        -UseSsl `
        -Credential $Credencial `
        -From $De `
        -To $Para `
        -Subject $Asunto `
        -Body $Cuerpo `
        -Encoding UTF8
}

# Llama la funcion en caso de error:
# Envia-AlertaEmail "ERROR Backup MuOnline" "Backup fallo en $(Get-Date). Revisa el log: $LogFile"

Con este sistema completo tendrás: backup SQL automático a las 3:00, subida a la nube a las 3:30, rotación de archivos locales, retención por capas en la nube y alertas por correo en caso de fallo. Tus datos de personajes, cuentas, inventarios y configuraciones del servidor estarán protegidos incluso en escenarios de falla crítica de hardware.

Perguntas frequentes

¿Con qué frecuencia debo hacer backup del servidor?

Para servidores activos, realiza backups completos diariamente y backups incrementales cada 4-6 horas. La base de datos MU almacena personajes, cuentas, inventarios y progreso de quests — perder 6 horas de datos ya es suficiente para frustrar jugadores y dañar la reputación del servidor.

¿El backup automático impacta el rendimiento del servidor durante el proceso?

Depende del método. Un backup directo con BACKUP DATABASE en SQL Server genera I/O intenso en el disco. Para minimizar el impacto, programa los backups en las horas de menor tráfico (madrugada), usa compresión (WITH COMPRESSION) y, si es posible, escribe el backup en un disco físico separado antes de subirlo a la nube.

¿Qué archivos del servidor de MU necesito incluir en el backup además de la base de datos?

Además de la base SQL, incluye las carpetas Data\\ del GameServer (configuraciones de monstruos, spots, drops, Castle Siege), los archivos .ini y .xml del ConnectServer y JoinServer, los archivos de configuración del WebEngine o panel web, y cualquier script personalizado de evento o NPC que hayas editado.

¿Cómo verifico que el backup enviado a la nube está íntegro?

Siempre que sea posible, realiza una prueba de restauración mensual en un entorno separado. Para verificación rápida, compara el tamaño del archivo de backup con el esperado y, en el caso de backups SQL con CHECKSUM, usa RESTORE VERIFYONLY para validar la integridad sin restaurar completamente.

¿Cuál es el tamaño promedio de una base de datos de servidor MU S6?

Varía mucho con la antigüedad del servidor y el número de cuentas. Un servidor nuevo con pocas centenas de cuentas ocupa entre 500 MB y 2 GB. Servidores más antiguos con miles de cuentas y logs extensos pueden llegar a 10-20 GB. Monitorea el crecimiento para dimensionar correctamente el almacenamiento en la nube.

EQ

Equipo ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Sigue leyendo

Artículos relacionados

💾
Tutorial

Cómo hacer backup de la base de datos de tu servidor de MU Online

Guía completa de backup para servidores de MU Online: por qué el backup no es opcional (las 4 catástrofes más comunes que borran datos de servidores — disco duro, SQL Server corrupto, hack, error humano), qué bases de datos necesitas respaldar (MuOnline, EventMU, RankingMU y las otras), el paso a paso para configurar un job de backup automático en SQL Server Agent que corra cada noche, cómo hacer backup manual inmediato antes de una actualización de riesgo, cómo gestionar la rotación de backups para no llenar el disco (guardar los últimos 7 días, el de cada semana, el de cada mes), cómo copiar los backups a otro lugar (otro disco, la nube, un NAS), cómo verificar que un backup está íntegro antes de necesitarlo, el procedimiento exacto de restauración ante una emergencia, y cuánto tiempo dura una restauración según el tamaño de la base.

12 min · Intermedio
🛡️
Tutorial

Cómo proteger tu servidor de MU Online contra DDoS

Guía completa para proteger un servidor de MU Online contra ataques DDoS: qué es un DDoS y por qué los servidores de MU son objetivos frecuentes (competencia entre servidores, jugadores baneados, tramposos), los tipos de ataques más comunes (volumétrico UDP/TCP, SYN flood, amplificación DNS), las capas de protección que debes implementar (hosting anti-DDoS, filtrado en el borde de red, firewall del servidor, rate limiting), por qué esconder la IP real del servidor es fundamental y cómo los atacantes la descubren (sitio web, cliente, DNS), cómo configurar el Firewall de Windows correctamente para reducir la superficie de ataque, el comportamiento correcto durante un ataque activo, cómo evaluar proveedores de VPS con protección anti-DDoS para servidores de MU en LATAM, y la diferencia entre mitigación básica y protección dedicada.

12 min · Avanzado
🖥️
Tutorial

Cómo Restaurar la Base de Datos y Mover tu Servidor de MU Online

Aprende a restaurar tu base de datos SQL de MU Online y migrar el servidor completo a una nueva máquina sin pérdida de datos ni tiempo de inactividad prolongado.

18 min · Avanzado