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.
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.
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
GuildeGuildMember— 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
.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
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:
- Abra Agendador de Tarefas (
taskschd.msc) - Clique em Criar Tarefa Basica
- 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"
- Em Condições, desmarque "Iniciar somente se o computador estiver em energia AC" (VPS roda 24h)
- Em Configurações, marque "Executar tarefa o mais breve possível se um inicio agendado for perdido"
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;
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.