Backup incremental vs. completo para servidores de MU Online: qual escolher
Entenda as diferenças entre backup completo, incremental e diferencial para servidores de MU Online, com exemplos de scripts, rotação de retenção e um plano de recuperação de desastre testável.
Perder o banco de dados de um servidor de MU Online — contas, personagens, itens, guildas, histórico de ranking — é o tipo de incidente que pode encerrar um projeto da noite para o dia, especialmente se a comunidade já investiu tempo e dinheiro nele. A pergunta "backup incremental ou completo" não t
Perder o banco de dados de um servidor de MU Online — contas, personagens, itens, guildas, histórico de ranking — é o tipo de incidente que pode encerrar um projeto da noite para o dia, especialmente se a comunidade já investiu tempo e dinheiro nele. A pergunta "backup incremental ou completo" não tem uma resposta única: a escolha certa depende do tamanho do banco, da frequência de mudança dos dados e do tempo aceitável de recuperação em caso de desastre. Este tutorial explica as diferenças técnicas entre os tipos de backup, mostra como combiná-los na prática para um servidor de MU, e apresenta um plano de recuperação testável — porque um backup nunca restaurado é apenas uma suposição.
Os três tipos de backup
Antes de decidir uma estratégia, é preciso entender exatamente o que cada tipo faz:
| Tipo | O que copia | Velocidade de geração | Velocidade de restauração | Espaço em disco |
|---|---|---|---|---|
| Completo (full) | Todo o banco de dados/arquivos, do zero | Lenta | Rápida (arquivo único) | Alto |
| Incremental | Só o que mudou desde o último backup de qualquer tipo | Muito rápida | Lenta (depende da cadeia inteira) | Baixo |
| Diferencial | Só o que mudou desde o último completo | Rápida (cresce com o tempo) | Média (completo + 1 diferencial) | Médio |
A escolha entre incremental e diferencial é o ponto mais confundido: incremental é mais leve para gerar, mas mais arriscado para restaurar, porque a cadeia inteira (completo + incremental 1 + incremental 2 + ... + incremental N) precisa estar intacta. Se um arquivo intermediário corromper, tudo depois dele se torna inútil.
O que precisa entrar no backup de um servidor de MU
Muitos administradores fazem backup só do banco de dados e esquecem arquivos essenciais para a recuperação completa:
| Componente | Por quê é crítico | Frequência recomendada |
|---|---|---|
| Banco de dados (contas, personagens, itens, guildas) | Perda = perda total do progresso dos jogadores | Completo diário + incremental/log a cada 15-30 min |
| Arquivos de configuração do servidor (GameServer, ConnectServer, JoinServer) | Recriar do zero pode levar horas se não documentado | A cada alteração + semanal |
| Logs de transação/auditoria (trade, GM commands) | Necessário para investigar disputas e fraudes após incidente | Junto com o backup do banco |
| Cliente e arquivos customizados (itens, mapas, asas custom) | Perda exige reconstruir todo o trabalho de customização | Semanal ou a cada release |
| Scripts de automação (cron, deploy, anti-cheat) | Sem eles, restaurar o servidor não recupera a operação completa | A cada alteração |
Estratégia recomendada por porte de servidor
Não existe uma estratégia única — o tamanho do banco e o volume de jogadores ativos mudam o cálculo de custo-benefício.
| Porte do servidor | Estratégia recomendada | Retenção |
|---|---|---|
| Pequeno (até 200 online) | Completo diário, sem incremental (banco pequeno o bastante) | 14 dias |
| Médio (200 a 1000 online) | Completo semanal + incremental diário | 30 dias completos, 14 dias incrementais |
| Grande (1000+ online) | Completo diário + incremental/log a cada 15-30 min | 30 dias completos, 7 dias de log de transação |
Exemplo de script de backup completo (MySQL/MariaDB)
A maioria dos emuladores de MU (MuEmu, IGCN) usa MySQL ou MariaDB. Um script básico de backup completo, agendado via cron:
#!/bin/bash
DATA=$(date +%Y%m%d_%H%M%S)
DESTINO="/backup/mu/completo"
BANCO="mu_online"
mysqldump --single-transaction --routines --triggers \
-u backup_user -p"SENHA_AQUI" "$BANCO" | gzip > "$DESTINO/full_${BANCO}_${DATA}.sql.gz"
# Remove backups completos com mais de 30 dias
find "$DESTINO" -name "full_${BANCO}_*.sql.gz" -mtime +30 -delete
O parâmetro --single-transaction é essencial em bancos InnoDB — ele garante uma foto consistente do banco sem travar as tabelas durante o dump, evitando impacto perceptível para jogadores online no momento do backup.
Exemplo de backup incremental via binlog (MySQL)
Para incremental de verdade (não um "completo pequeno"), habilite o binary log do MySQL e faça backup dele periodicamente:
# my.cnf — habilitar binlog
[mysqld]
log-bin = /var/log/mysql/mu-bin
binlog_expire_logs_seconds = 604800
server-id = 1
#!/bin/bash
# Copia os binlogs gerados desde o último backup completo
DESTINO="/backup/mu/incremental"
mysqladmin -u backup_user -p"SENHA_AQUI" flush-logs
cp /var/log/mysql/mu-bin.* "$DESTINO/"
Restaurar com binlog exige aplicar o completo mais recente e depois "reproduzir" os binlogs na ordem exata — por isso documente sempre a ordem cronológica dos arquivos no nome ou em um índice separado.
Rotação e política de retenção (3-2-1)
A regra clássica de backup 3-2-1 se aplica bem a servidores de MU: 3 cópias dos dados, em 2 mídias diferentes, com 1 cópia fora do local físico do servidor (outra cidade, outro provedor de nuvem). Um VPS que hospeda o backup na mesma máquina do servidor de produção não é backup real — é só uma cópia que morre junto no mesmo incidente (falha de disco, invasão, banimento da conta do provedor).
| Cópia | Local sugerido | Propósito |
|---|---|---|
| 1ª cópia | Disco separado no mesmo servidor | Recuperação rápida de erro operacional (query ruim, exclusão acidental) |
| 2ª cópia | Outro servidor/VPS, mesma região | Recuperação se o disco principal falhar fisicamente |
| 3ª cópia | Armazenamento em nuvem (S3, Backblaze, Google Cloud Storage) em outra região | Recuperação de desastre total (invasão, banimento de conta, incêndio no datacenter) |
Criptografia e segurança do backup
Um backup com dados de contas de jogadores (mesmo que senhas estejam hasheadas) é um ativo sensível — se vazado, expõe e-mails, IPs de login e histórico de compras da loja. Criptografe o arquivo antes de enviar para a nuvem:
gpg --symmetric --cipher-algo AES256 --output "full_mu_online_${DATA}.sql.gz.gpg" "full_mu_online_${DATA}.sql.gz"
Armazene a senha de criptografia em um cofre de senhas separado da infraestrutura do servidor — se o servidor for comprometido, o backup criptografado continua protegido mesmo que o invasor tenha acesso à máquina.
Testando a restauração (o passo que todos pulam)
Um cronograma de teste de restauração deve existir independentemente do quão "confiável" o processo pareça:
- Reserve um ambiente isolado (VPS de teste ou container) sem acesso à rede de produção.
- Restaure o backup completo mais recente do zero.
- Aplique os incrementais/binlogs na ordem correta, se aplicável.
- Suba o GameServer apontando para esse banco restaurado e valide login, personagem e inventário de uma conta de teste conhecida.
- Documente o tempo total gasto — esse número é o seu RTO real (tempo de recuperação), não uma estimativa teórica.
Monitoramento e alertas de falha de backup
Um backup que falha silenciosamente é pior que não ter backup, porque cria falsa sensação de segurança. Configure alerta automático (webhook no Discord, e-mail) quando o script de backup terminar com erro ou quando o arquivo gerado tiver tamanho anormalmente pequeno comparado ao histórico:
TAMANHO=$(stat -c%s "$DESTINO/full_${BANCO}_${DATA}.sql.gz")
if [ "$TAMANHO" -lt 1000000 ]; then
curl -H "Content-Type: application/json" -d '{"content":"⚠️ Backup do MU gerou arquivo suspeito de pequeno!"}' "$WEBHOOK_DISCORD"
fi
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
| Restauração falha por arquivo de incremental ausente | Um binlog da cadeia foi apagado por rotação automática | Ajustar binlog_expire_logs_seconds e sincronizar com a retenção do backup completo |
| Backup completo trava o jogo durante geração | Faltou --single-transaction no mysqldump | Adicionar o parâmetro para dump consistente sem lock de tabela |
| Backup nunca testado falha na hora da recuperação real | Ausência de rotina de teste de restauração | Agendar teste mensal em ambiente isolado |
| Todas as cópias de backup ficam no mesmo servidor | Falta de política 3-2-1 | Enviar ao menos uma cópia para outra região/provedor |
| Alerta de falha nunca chega | Script sem verificação de sucesso/tamanho de arquivo | Adicionar checagem de exit code e tamanho com notificação via webhook |
Checklist de estratégia de backup
- Backup completo agendado com frequência adequada ao porte do servidor.
- Incremental ou diferencial configurado se o volume de mudança justificar.
- Regra 3-2-1 aplicada (cópia fora do servidor de produção).
- Arquivos criptografados antes de qualquer envio à nuvem.
- Alerta automático de falha de backup configurado.
- Teste de restauração completo realizado em ambiente isolado no último mês.
- Documentação da ordem de restauração (completo + incrementais) atualizada.
Com a estratégia de backup validada e testada, o próximo passo natural é revisar a infraestrutura geral do servidor — desde o provisionamento até a configuração de segurança — descrita com mais detalhe no tutorial de criação de servidor de MU Online.
Perguntas frequentes
Backup incremental é sempre mais rápido que completo?
Sim, no momento da geração — ele copia só o que mudou desde o último backup. Mas a restauração é mais lenta e mais arriscada, porque depende da cadeia completa de incrementais anteriores estar íntegra.
Posso usar só backup incremental e nunca fazer completo de novo?
Não é recomendado. A cadeia de incrementais cresce indefinidamente e qualquer arquivo corrompido no meio invalida a restauração de tudo depois dele. Refaça um completo periodicamente (semanal é comum) para 'resetar' a cadeia.
Qual a diferença entre incremental e diferencial?
Incremental copia só o que mudou desde o último backup (de qualquer tipo). Diferencial copia tudo que mudou desde o último completo. Diferencial usa mais espaço que incremental, mas restaura mais rápido, porque só depende do completo + o último diferencial.
Com que frequência devo fazer backup do banco de um servidor de MU ativo?
Para servidores com jogadores ativos, backup completo diário do banco (fora do pico de acesso) e incremental de log de transação a cada 15-30 minutos é uma prática comum, minimizando perda de progresso em caso de falha.
Testar o backup é realmente necessário se ele 'sempre funcionou'?
Sim, obrigatório. Um backup nunca restaurado é uma suposição, não uma garantia. Reserve um ambiente de teste mensal para restaurar o backup mais recente do zero e validar que o servidor sobe corretamente com aqueles dados.