O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Tutoriais

Como Fazer Backup Automático do Servidor de MU na Nuvem

Aprenda a automatizar o backup do seu servidor de MU Online S6 na nuvem com scripts, agendamentos e boas práticas de segurança de dados.

EQ Equipe ViciadosMU · Atualizado em 4 jul 2026 · ⏱ 12 min de leitura

Por que Automatizar o Backup do Servidor de MU Online

Administrar um servidor de MU Online Season 6 envolve um ecossistema complexo de dados: o banco SQL Server com contas, personagens, inventários, progresso de quests, registros de Castle Siege, dados de guildas e transações de zen. Perder esse banco de dados — seja por falha de hardware, corrompimento, ou erro humano — significa perder todo o histórico do servidor.

A automação de backup resolve o principal problema dos administradores: a disciplina. Fazer backup manual funciona enquanto você lembra. Um sistema automatizado funciona enquanto o servidor está ligado. A diferença entre os dois pode ser a sobrevivência do seu projeto.

Neste tutorial você vai configurar um fluxo completo de backup automático: geração do arquivo, compressão, envio para armazenamento em nuvem e rotação de arquivos antigos.

Nota: Este tutorial cobre servidores baseados em SQL Server 2008, 2014 e 2019, que são as versões mais comuns para servidores MU S6. Os scripts PowerShell e T-SQL funcionam em todas essas versões com mínimas diferenças de sintaxe.

Entendendo o que Precisa ser Guardado

Antes de automatizar qualquer coisa, é fundamental saber o que guardar. Um servidor MU S6 típico tem duas categorias de dados críticos.

Banco de Dados SQL Server

O núcleo do servidor. O banco MuOnline (ou o nome que você configurou) contém:

  • Tabela Character — todos os personagens, incluindo classe (Dark Knight, Dark Wizard, Fairy Elf, Magic Gladiator, Dark Lord, Summoner), level, stats (STR, AGI, VIT, ENE, CMD para Dark Lord), reset count
  • Tabela AccountCharacter — vínculo entre contas e personagens
  • Tabela Inventory — itens equipados e no inventário de cada personagem
  • Tabela Guild e GuildMember — estrutura completa de guildas
  • Tabelas de evento — registros do Castle Siege, Crywolf Fortress, Blood Castle, Devil Square
  • Tabela MuCash / VIP — se o servidor tiver sistema de pontos ou VIP

Arquivos de Configuração do GameServer

Estes arquivos não estão no banco e são frequentemente esquecidos:

GameServer\
  └── Data\
        ├── Monster\          → spots e drops customizados por mapa
        ├── MapServerInfo.txt → configurações 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 e atributos de itens customizados
        └── *.ini / *.xml     → configurações gerais do servidor
Atenção: Se você customizou spots de monstros em Tarkan ou Aida, editou drops da Land of Trials ou configurou eventos em Crywolf Fortress, esses dados estão nos arquivos .txt do GameServer — não no banco SQL. Um backup apenas do SQL não recupera essas configurações.

Configurando o Backup Automático do SQL Server

Passo 1 — Criar o Script T-SQL de Backup

Abra o SQL Server Management Studio (SSMS) e crie uma procedure de backup. Este script usa compressão nativa e salva em pasta local antes do envio para nuvem.

-- Procedure: sp_BackupMuOnline
-- Cria backup comprimido com timestamp no nome do arquivo

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,          -- reduz tamanho em ate 80%
            CHECKSUM,             -- valida integridade durante backup
            FORMAT,
            STATS = 10,           -- progresso a cada 10%
            NAME = N'Backup automatico ViciadosMU';

    -- Registra o backup na tabela de log
    INSERT INTO MuOnline.dbo.BackupLog (DataHora, Arquivo, Status)
    VALUES (GETDATE(), @FileName, 'OK');

    PRINT 'Backup concluido: ' + @FullPath;
END;
GO
Dica: Crie a tabela BackupLog no banco MuOnline para ter um histórico de quando cada backup foi executado. Se um dia o servidor travar no horário do backup, você saberá exatamente qual foi o último bem-sucedido.

Passo 2 — Agendar via SQL Server Agent

No SSMS, expanda SQL Server Agent → Jobs → New Job. Configure:

  • Nome: Backup_Automatico_MuOnline
  • Step 1: T-SQL, executa EXEC sp_BackupMuOnline
  • Schedule: Diário às 03:00 (horário de menor movimento no servidor)

Para backups incrementais a cada 6 horas, crie um segundo schedule com frequência de 6 horas para um backup do transaction log (modo de recuperação Full).


Enviando para a Nuvem com PowerShell

Com o arquivo .bak salvo localmente, o próximo passo é enviá-lo automaticamente para armazenamento em nuvem. O PowerShell nativo do Windows se integra com as principais opções sem necessidade de software adicional.

Usando rclone para Múltiplos Provedores

O rclone é uma ferramenta de linha de comando gratuita e de código aberto que se conecta a Google Drive, Mega, Dropbox, OneDrive, S3-compatíveis e dezenas de outros serviços. É a escolha mais versátil para servidores MU.

# Script: BackupMuNuvem.ps1
# Executa backup SQL e envia para nuvem via rclone

param(
    [string]$BackupDir  = "D:\Backups\MuOnline\",
    [string]$RcloneDest = "gdrive:Backups/MuOnline/",   # ajuste para seu remote
    [int]$DiasRetencao  = 7   # apaga backups locais com mais 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 → Executa backup no SQL Server
Write-Log "Gerando backup do banco de dados..."
$SqlResult = sqlcmd -S localhost -Q "EXEC sp_BackupMuOnline" -b
if ($LASTEXITCODE -ne 0) {
    Write-Log "ERRO: Falha no backup SQL. Codigo: $LASTEXITCODE"
    exit 1
}
Write-Log "Backup SQL concluido com sucesso."

# 2 → Identifica o arquivo mais recente
$Arquivo = Get-ChildItem -Path $BackupDir -Filter "*.bak" |
           Sort-Object LastWriteTime -Descending |
           Select-Object -First 1

if (-not $Arquivo) {
    Write-Log "ERRO: Nenhum arquivo .bak encontrado em $BackupDir"
    exit 1
}
Write-Log "Arquivo para envio: $($Arquivo.Name) ($([math]::Round($Arquivo.Length/1MB,2)) MB)"

# 3 → Envia para nuvem com rclone
Write-Log "Enviando para nuvem: $RcloneDest"
& rclone copy $Arquivo.FullName $RcloneDest --progress --log-level INFO

if ($LASTEXITCODE -ne 0) {
    Write-Log "ERRO: Falha no envio para nuvem. Verifique configuracao do rclone."
    exit 1
}
Write-Log "Envio concluido com sucesso."

# 4 → Remove backups locais antigos (rotacao)
Write-Log "Removendo backups locais com mais de $DiasRetencao dias..."
$Cutoff = (Get-Date).AddDays(-$DiasRetencao)
$Antigos = Get-ChildItem -Path $BackupDir -Filter "*.bak" |
           Where-Object { $_.LastWriteTime -lt $Cutoff }

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

Write-Log "Rotacao concluida. Backups removidos: $($Antigos.Count)"
Write-Log "=== Backup finalizado com sucesso ==="

Configurando o rclone

Após instalar o rclone, execute rclone config e siga o assistente para configurar seu provedor. Para Google Drive:

rclone config
→ n (new remote)
→ Nome: gdrive
→ Tipo: drive (Google Drive)
→ Siga o fluxo de autenticacao OAuth no navegador
→ Confirme as configuracoes

Para testar: rclone lsd gdrive: deve listar as pastas do seu Google Drive.


Agendando o Script no Agendador de Tarefas do Windows

Com o script PowerShell criado, agende sua execução automática:

  1. Abra Agendador de Tarefas (taskschd.msc)
  2. Clique em Criar Tarefa Basica
  3. Configure:
  • Nome: BackupMuOnlineNuvem
  • Disparador: Diario, 03:30 (30 minutos após o backup SQL)
  • Acao: Iniciar um programa
  • Programa: powershell.exe
  • Argumentos: -NonInteractive -ExecutionPolicy Bypass -File "D:\Scripts\BackupMuNuvem.ps1"
  1. Em Condições, desmarque "Iniciar somente se o computador estiver em energia AC" (VPS roda 24h)
  2. Em Configurações, marque "Executar tarefa o mais breve possível se um inicio agendado for perdido"
Dica: Configure o Agendador de Tarefas para usar uma conta de serviço dedicada (não a conta Administrator principal). Isso isola as permissões do processo de backup e facilita auditoria. No campo "Executar como usuário", crie um usuario svc_backup com acesso apenas às pastas necessárias.

Estratégia de Retenção e Organização na Nuvem

Manter todos os backups para sempre consome espaço e dificulta encontrar o arquivo certo em uma emergência. Use uma estratégia em camadas:

gdrive:Backups/MuOnline/
  ├── diario/       → ultimos 7 dias (substituidos pela rotacao do script)
  ├── semanal/      → 1 backup por semana, retidos por 4 semanas
  └── mensal/       → 1 backup por mes, retidos por 6 meses

Para popular as pastas semanal e mensal automaticamente, adicione ao script PowerShell:

# No final do script, apos envio bem-sucedido:

# Backup semanal (toda segunda-feira)
if ((Get-Date).DayOfWeek -eq 'Monday') {
    & rclone copy $Arquivo.FullName "gdrive:Backups/MuOnline/semanal/" --progress
    Write-Log "Backup semanal enviado."
}

# Backup mensal (todo dia 1)
if ((Get-Date).Day -eq 1) {
    & rclone copy $Arquivo.FullName "gdrive:Backups/MuOnline/mensal/" --progress
    Write-Log "Backup mensal enviado."
}

Testando a Restauração

Um backup que nunca foi testado pode ser inútil. Reserve tempo uma vez por mês para testar a restauração:

-- Restaura o banco em um ambiente de teste (NUNCA no servidor em producao)
-- Primeiro, coloque o banco de destino offline ou use um nome diferente

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

-- Valida integridade sem restaurar (mais rapido para verificacao rotineira)
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\MuOnline\MuOnline_20240115_0300.bak'
WITH CHECKSUM;
Atenção: Nunca execute RESTORE DATABASE apontando para o banco de producao enquanto o servidor MU estiver rodando. Isso derrubará o GameServer e corrompera dados. Use sempre um banco com nome diferente (ex: MuOnline_Teste) para testes de restauração.

Monitoramento e Alertas

Configure alertas por e-mail para saber quando um backup falhar:

# Adicione ao final do script, no bloco de tratamento de erro:

function Envia-AlertaEmail {
    param([string]$Assunto, [string]$Corpo)

    $SmtpServer = "smtp.gmail.com"
    $Porta      = 587
    $De         = "[email protected]"
    $Para       = "[email protected]"

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

    Send-MailMessage `
        -SmtpServer $SmtpServer `
        -Port $Porta `
        -UseSsl `
        -Credential $Credencial `
        -From $De `
        -To $Para `
        -Subject $Assunto `
        -Body $Corpo `
        -Encoding UTF8
}

# Chame a funcao em caso de erro:
# Envia-AlertaEmail "ERRO Backup MuOnline" "Backup falhou em $(Get-Date). Verifique o log: $LogFile"

Com esse sistema completo você terá: backup SQL automático às 3h, envio para nuvem às 3h30, rotação de arquivos locais, retenção em camadas na nuvem e alertas por e-mail em caso de falha. Seus dados de personagens, contas, inventários e configurações de servidor estarão protegidos mesmo em cenários de falha crítica de hardware.

Perguntas frequentes

Com que frequência devo fazer backup do servidor?

Para servidores ativos, faça backups completos diários e backups incrementais a cada 4-6 horas. O banco de dados MU guarda personagens, contas, inventários e progresso de quest — uma perda de 6 horas de dados já é suficiente para frustrar jogadores e manchar a reputação do servidor.

O backup automático impacta a performance do servidor durante o processo?

Depende do método. Um backup direto do SQL Server com BACKUP DATABASE gera I/O intenso no disco. Para minimizar o impacto, agende os backups nos horários de menor pico (madrugada), use compressão (WITH COMPRESSION) e, se possível, faça o backup em um disco físico separado do banco principal antes de enviar para a nuvem.

Quais arquivos do servidor de MU preciso incluir no backup além do banco de dados?

Além do banco SQL, inclua as pastas Data\\ do GameServer (configurações de monstros, spots, drops, Castle Siege), os arquivos .ini e .xml do ConnectServer e JoinServer, os arquivos de configuração do WebEngine ou painel web, e qualquer script customizado de evento ou NPC que você tenha editado.

Como verifico se o backup enviado para a nuvem está íntegro?

Sempre que possível, faça um teste de restauração mensal em um ambiente separado. Para verificação rápida, compare o tamanho do arquivo de backup com o esperado e, no caso de backups SQL com CHECKSUM, use RESTORE VERIFYONLY para validar a integridade sem restaurar completamente.

Qual o tamanho médio de um banco de dados de servidor MU S6?

Varia muito com o tempo de vida do servidor e número de contas. Um servidor novo com poucas centenas de contas ocupa entre 500 MB e 2 GB. Servidores mais antigos com milhares de contas e logs extensos podem chegar a 10-20 GB. Monitore o crescimento para dimensionar o armazenamento em nuvem corretamente.

EQ

Equipe ViciadosMU

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

Continue lendo

Artigos relacionados