Manutenção Regular de Servidor de MU: Backup, Updates e Rotina
Aprenda a criar rotinas de backup automatizado, aplicar updates com segurança e manter seu servidor MU Online estável e atualizado.
Por Que a Manutenção Regular é Crítica
Um servidor MU Online privado acumula dados, logs e fragmentação de banco de dados em ritmo acelerado. Sem manutenção periódica, você enfrentará lentidão progressiva, corrupção de dados de personagens e falhas em eventos como Blood Castle e Devil Square. Este guia cobre os procedimentos essenciais que todo administrador precisa executar semanalmente.
Parte 1: Backup do Banco de Dados
Passo 1 — Identificar os bancos de dados do servidor
Seu servidor MU usa tipicamente dois bancos principais no SQL Server:
MuOnline— dados de personagens, contas, itens, guildsMeShop(ouWebShop) — loja online, cash points, transações
Abra o SQL Server Management Studio (SSMS) e conecte ao servidor local (localhost ou .\SQLEXPRESS).
Passo 2 — Criar backup manual via T-SQL
Execute no SSMS (Query → New Query):
-- Backup completo do banco MuOnline
BACKUP DATABASE [MuOnline]
TO DISK = 'C:\Backups\MuOnline_Full_' +
CONVERT(VARCHAR, GETDATE(), 112) + '.bak'
WITH FORMAT, COMPRESSION, STATS = 10;
-- Backup completo do banco MeShop
BACKUP DATABASE [MeShop]
TO DISK = 'C:\Backups\MeShop_Full_' +
CONVERT(VARCHAR, GETDATE(), 112) + '.bak'
WITH FORMAT, COMPRESSION, STATS = 10;
C:\Backups\ antes de executar. O parâmetro COMPRESSION reduz o tamanho do arquivo em até 70% — essencial para não lotar o disco rapidamente.Passo 3 — Automatizar com SQL Server Agent
- No SSMS, expanda SQL Server Agent → Jobs → New Job
- Em General, nomeie:
Backup_Diario_MuOnline - Em Steps → New Step:
- Type:
Transact-SQL script (T-SQL) - Cole o script do Passo 2
- Em Schedules → New Schedule:
- Frequency:
Daily - Time:
03:00:00(horário de menor movimento)
- Clique OK para salvar o job
.bat chamando sqlcmd.Passo 4 — Script .bat para backup via Task Scheduler (Express)
Crie C:\Scripts\backup_mu.bat:
@echo off
SET HORA=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
sqlcmd -S localhost\SQLEXPRESS -Q "BACKUP DATABASE [MuOnline] TO DISK='C:\Backups\MuOnline_%HORA%.bak' WITH FORMAT, COMPRESSION"
sqlcmd -S localhost\SQLEXPRESS -Q "BACKUP DATABASE [MeShop] TO DISK='C:\Backups\MeShop_%HORA%.bak' WITH FORMAT, COMPRESSION"
echo Backup concluido em %DATE% %TIME% >> C:\Logs\backup_log.txt
No Task Scheduler: Create Task → Triggers → Daily → 03:00 → Actions → Start a program → aponte para C:\Scripts\backup_mu.bat.
Parte 2: Backup dos Arquivos do Servidor
Passo 5 — Estrutura de diretórios a preservar
Os diretórios críticos variam por versão, mas em Season 6 padrão são:
C:\MuServer\
├── GameServer\
│ ├── Data\ ← configurações de monstros, mapas, drops
│ ├── GameServer.ini ← configurações principais
│ └── *.cfg ← arquivos de configuração de eventos
├── ConnectServer\
│ └── ConnectServer.ini
├── DataServer\
│ └── DataServer.ini
└── EventServer\
└── EventServer.cfg
Passo 6 — Script de backup de arquivos
Crie C:\Scripts\backup_files.bat:
@echo off
SET DEST=C:\Backups\Files\%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
mkdir "%DEST%"
xcopy "C:\MuServer\GameServer\Data\" "%DEST%\GameServer\Data\" /E /Y /Q
xcopy "C:\MuServer\GameServer\*.ini" "%DEST%\GameServer\" /Y /Q
xcopy "C:\MuServer\GameServer\*.cfg" "%DEST%\GameServer\" /Y /Q
xcopy "C:\MuServer\ConnectServer\" "%DEST%\ConnectServer\" /E /Y /Q
xcopy "C:\MuServer\DataServer\" "%DEST%\DataServer\" /E /Y /Q
echo Backup de arquivos: %DATE% %TIME% >> C:\Logs\backup_log.txt
Parte 3: Limpeza e Otimização do Banco de Dados
Passo 7 — Remover logs e personagens inativos
Logs acumulados travam queries e inflam o banco. Execute mensalmente:
-- Remover logs de conexão com mais de 90 dias
DELETE FROM MuOnline.dbo.T_Log_Connectinfo
WHERE ConnectDate < DATEADD(DAY, -90, GETDATE());
-- Remover logs de chat com mais de 30 dias
DELETE FROM MuOnline.dbo.T_Log_Chat
WHERE LogDate < DATEADD(DAY, -30, GETDATE());
-- Remover contas nunca logadas após 180 dias do registro
DELETE FROM MuOnline.dbo.MEMB_INFO
WHERE mail_chek = '0'
AND memb_joindate < DATEADD(DAY, -180, GETDATE());
SELECT COUNT(*) com a mesma cláusula WHERE antes do DELETE para confirmar quantos registros serão removidos.Passo 8 — Reconstruir índices fragmentados
-- Verificar fragmentação dos índices
SELECT
OBJECT_NAME(ips.object_id) AS TableName,
i.name AS IndexName,
ips.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID('MuOnline'), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id
WHERE ips.avg_fragmentation_in_percent > 30
ORDER BY ips.avg_fragmentation_in_percent DESC;
-- Reconstruir todos os índices do banco MuOnline
USE MuOnline;
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD WITH (ONLINE = OFF)';
Passo 9 — Shrink do log de transações
USE MuOnline;
-- Truncar log de transações
BACKUP LOG [MuOnline] TO DISK = 'NUL';
DBCC SHRINKFILE (MuOnline_log, 1);
Parte 4: Aplicando Updates de Servidor
Passo 10 — Procedimento seguro de update de arquivos
Nunca substitua arquivos com o servidor online. Siga esta sequência:
- Anuncie manutenção no site/Discord com 30 minutos de antecedência
- Salve o estado atual:
CHECKPOINTno SSMS - Pare os serviços na ordem correta:
- Feche
GameServer.exe - Feche
EventServer.exe - Feche
DataServer.exe - Feche
ConnectServer.exe
- Faça backup dos arquivos que serão substituídos (Passo 6)
- Aplique os novos arquivos
- Suba os serviços na ordem inversa: ConnectServer → DataServer → EventServer → GameServer
Passo 11 — Aplicar scripts SQL de update
Quando o update inclui mudanças no banco (novas tabelas, colunas ou dados):
-- Sempre use transação para poder reverter em caso de erro
BEGIN TRANSACTION;
-- Exemplo: adicionar coluna de novo sistema
ALTER TABLE MuOnline.dbo.Character
ADD NewSystemPoints INT NOT NULL DEFAULT 0;
-- Exemplo: inserir novos itens na tabela de itens base
INSERT INTO MuOnline.dbo.Item_serial (Item_index, Item_name, Item_level)
VALUES (512, 'Novo Item', 0);
-- Se tudo correu bem, confirme
COMMIT TRANSACTION;
-- Se houve erro, reverta com:
-- ROLLBACK TRANSACTION;
Passo 12 — Verificar configurações após update
Após update, confira os arquivos .ini e .cfg para parâmetros novos que possam ter sido adicionados. Compare o arquivo novo com seu backup:
fc "C:\Backups\GameServer_anterior\GameServer.ini" "C:\MuServer\GameServer\GameServer.ini" > C:\Logs\diff_ini.txt
Parte 5: Rotina de Manutenção Semanal
Checklist semanal recomendado
Segunda-feira:
[x] Verificar logs de erro do GameServer (GameServer\Log\)
[x] Checar espaço em disco (mínimo 20% livre)
[x] Confirmar que backups automáticos rodaram
Quarta-feira:
[x] Verificar conectividade: ConnectServer respondendo na porta 44405
[x] Checar tabela T_Log_Hack para tentativas de exploit
[x] Monitorar uso de memória do GameServer.exe
Sexta-feira:
[x] Backup manual completo antes do fim de semana
[x] Verificar eventos programados (Blood Castle, Devil Square)
[x] Testar restore de backup em ambiente separado (mensal)
Passo 13 — Monitorar eventos automáticos
Verifique se os horários de eventos estão corretos em GameServer\Data\Events\ ou via banco:
-- Verificar configuração de horários de Blood Castle
SELECT * FROM MuOnline.dbo.EventSchedule
WHERE EventName LIKE 'BloodCastle%'
ORDER BY EventTime;
-- Resetar contador de Blood Castle se travar
UPDATE MuOnline.dbo.EventSchedule
SET EventStatus = 0, CurrentCount = 0
WHERE EventName = 'BloodCastle';
GameServer\Data\Events\BloodCastle.ini com os horários em formato HH:MM. Consulte a documentação da versão específica do seu servidor.Troubleshooting Comum
GameServer não inicia após update: Verifique o arquivo GameServer\Log\Error.log. O erro mais comum é incompatibilidade de versão de DLL. Restaure as DLLs do backup anterior.
Banco crescendo rapidamente: Execute EXEC sp_spaceused em cada tabela para identificar a maior. Em geral, T_Log_Connectinfo e T_Log_Chat são as responsáveis — aplique o DELETE do Passo 7.
ConnectServer não aceita conexões: Verifique se a porta 44405 está liberada no firewall do Windows e no roteador. Use netstat -an | findstr 44405 para confirmar que está escutando.
Personagens sumindo após restart: Indica que o GameServer está encerrando sem salvar. Adicione tempo de espera antes do shutdown: no console do GameServer, use o comando de save forçado antes de fechar o processo.
Perguntas frequentes
Com que frequência devo fazer backup do banco de dados?
O ideal é ter backup diário incremental e backup completo semanal. Para servidores ativos, considere backup a cada 6 horas usando SQL Server Agent Jobs ou um script .bat agendado no Task Scheduler do Windows.
Posso aplicar update de arquivos com o servidor online?
Nunca substitua arquivos do GameServer/ com o servidor rodando. Sempre pare todos os serviços (GameServer, ConnectServer, DataServer, EventServer) antes de qualquer substituição de arquivo executável ou .ini de configuração.
O que fazer se o banco travar após um update de SQL?
Execute DBCC CHECKDB('MuOnline') no SQL Server Management Studio para verificar integridade. Se houver erros, restaure o backup mais recente e aplique o script SQL novamente linha a linha para identificar o comando problemático.
Como verificar se o GameServer está consumindo memória excessiva?
No Task Manager (Ctrl+Shift+Esc), monitore o processo GameServer.exe. Consumo acima de 2 GB em servidores Season 6 com menos de 200 jogadores indica memory leak. Agende restart automático via Task Scheduler às 04:00 como medida preventiva.