O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Admin

Como corrigir erro de banco de dados corrompido no servidor de MU Online

Diagnostique tabelas corrompidas no MySQL/MariaDB do seu servidor de MU Online, recupere dados de personagens e itens com segurança, e implemente rotina de backup para evitar perda permanente de progresso.

RO Rodrigo · Atualizado em 19 out 2017 · ⏱ 16 min de leitura
Resposta rápida

Poucos incidentes assustam mais um administrador de servidor de MU Online do que abrir o GameServer pela manhã e encontrar erros de tabela corrompida no banco de dados — com o risco real de perder personagens, itens e progresso de jogadores. A boa notícia é que a maioria dos casos de corrupção é rec

Poucos incidentes assustam mais um administrador de servidor de MU Online do que abrir o GameServer pela manhã e encontrar erros de tabela corrompida no banco de dados — com o risco real de perder personagens, itens e progresso de jogadores. A boa notícia é que a maioria dos casos de corrupção é recuperável, total ou parcialmente, desde que o diagnóstico e a correção sigam uma ordem cuidadosa que não piore o dano. Este tutorial cobre o processo completo: identificar o tipo e a extensão da corrupção, recuperar o máximo de dados possível, restaurar de backup quando necessário, e implementar uma rotina que reduza drasticamente o risco de isso acontecer de novo.

Reconhecendo os sintomas de corrupção

Os sinais mais comuns de corrupção de banco de dados em um servidor de MU incluem: o GameServer falhando ao iniciar com erro relacionado a uma tabela específica (Character, Warehouse, AccountCharacter), consultas SQL simples retornando erro Table 'X' is marked as crashed, personagens ou itens desaparecendo ou aparecendo duplicados, e o próprio MySQL registrando erros de I/O ou de índice corrompido no log (mysqld.log ou Event Viewer no Windows).

Primeira ação: pare de escrever no banco

Antes de qualquer diagnóstico, pare o GameServer e qualquer outro processo que escreva no banco (JoinServer, painel web, ferramentas de administração). Continuar operando sobre um banco corrompido aumenta o risco de a corrupção se espalhar para outras tabelas ou de sobrescrever dados que ainda seriam recuperáveis. Faça uma cópia bruta dos arquivos de dados do MySQL (diretório data/, geralmente em /var/lib/mysql no Linux ou C:\ProgramData\MySQL\MySQL Server X.X\Data no Windows) antes de tentar qualquer reparo — essa cópia é sua rede de segurança caso o reparo piore a situação.

Identificando o motor de armazenamento das tabelas afetadas

SELECT TABLE_NAME, ENGINE 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'MuOnline';

O procedimento de recuperação muda conforme o motor:

MotorVulnerabilidade a corrupçãoFerramenta de reparo principal
MyISAMAlta (sem journaling, sensível a queda abrupta)myisamchk, REPAIR TABLE
InnoDBBaixa (redo log recupera automaticamente na maioria dos casos)innodb_force_recovery, dump e reimportação
Aria (MariaDB)Médiaaria_chk, REPAIR TABLE

Reparando tabelas MyISAM corrompidas

Com o MySQL parado, use myisamchk diretamente nos arquivos:

sudo systemctl stop mysql

cd /var/lib/mysql/MuOnline
myisamchk -r Character.MYI
myisamchk -r Warehouse.MYI

sudo systemctl start mysql

A flag -r (recover) tenta reconstruir o índice e recuperar o máximo de linhas possível. Se myisamchk reportar que não conseguiu recuperar completamente, tente a flag mais agressiva -o (safe recover), que é mais lenta mas mais cautelosa na reconstrução.

Alternativamente, com o MySQL rodando, você pode usar o comando SQL equivalente:

CHECK TABLE Character;
REPAIR TABLE Character;

Recuperando InnoDB com force_recovery

Se o InnoDB não sobe normalmente após uma corrupção, adicione a diretiva de recuperação forçada no my.cnf/my.ini, começando pelo nível mais brando:

[mysqld]
innodb_force_recovery = 1

Suba o serviço, faça um dump completo do banco (mysqldump) enquanto ainda está no modo de recuperação, e restaure esse dump em uma instância nova e limpa do MySQL. Nunca opere em produção com innodb_force_recovery ativo por muito tempo — esse modo desativa proteções internas e existe apenas para permitir a extração segura dos dados antes de recriar o banco do zero.

mysqldump -u root -p --single-transaction MuOnline > recovery_dump.sql

# Depois, em uma instância nova/limpa:
mysql -u root -p MuOnline < recovery_dump.sql

Se o nível 1 não for suficiente para o dump completar, aumente gradualmente até o nível 4 ou 6 (os níveis mais altos são mais destrutivos e devem ser o último recurso, pois ignoram verificações de integridade cada vez mais fundamentais).

Restaurando a partir de backup quando o reparo falha

Se o reparo direto não recuperar os dados de forma confiável, a restauração do último backup válido é o caminho mais seguro:

# Restaurar backup completo
mysql -u root -p MuOnline < backup_2026-07-28.sql

Antes de restaurar, compare o timestamp do backup com o momento estimado da corrupção — se o backup for de várias horas ou dias antes do incidente, avalie se vale a pena tentar recuperar manualmente as diferenças (registros de criação de personagem, drops recentes) a partir de logs do GameServer, se seu emulador mantiver esse tipo de log de auditoria.

Verificando integridade após a recuperação

Depois de reparar ou restaurar, rode verificações básicas antes de liberar o servidor para os jogadores:

CHECK TABLE Character, Warehouse, AccountCharacter, Guild;
SELECT COUNT(*) FROM Character;
SELECT COUNT(*) FROM Warehouse;

Compare as contagens com o que você esperaria com base no número de jogadores ativos — uma queda abrupta e inexplicável no número de linhas é sinal de que a recuperação não foi completa.

Investigando a causa raiz

Corrigir a corrupção sem entender a causa é resolver o sintoma, não o problema. As causas mais comuns são: queda de energia ou desligamento abrupto da máquina, kill -9 no processo do MySQL em vez de um encerramento gracioso, disco com setores defeituosos, e falta de espaço em disco durante uma escrita. Verifique os logs do sistema operacional e do MySQL (mysqld.log) no horário aproximado da corrupção para identificar qual desses cenários ocorreu.

# Verificar saúde do disco (Linux)
sudo smartctl -a /dev/sda

# Verificar espaço em disco disponível
df -h

Implementando rotina de backup para prevenir recorrência

Tipo de backupFrequência recomendadaRetenção
Dump lógico completo (mysqldump)Diário7 a 14 dias
Backup físico (cópia do diretório de dados, serviço parado)Semanal4 semanas
Backup incremental (binlog)ContínuoAté o próximo dump completo

Automatize o dump diário com um cron job (Linux) ou Agendador de Tarefas (Windows), gravando os arquivos em um local fora da própria máquina do servidor (outro disco, outro servidor, ou armazenamento em nuvem), para que um problema de hardware não destrua simultaneamente o banco e os backups.

# Exemplo de cron job diário às 4h da manhã
0 4 * * * mysqldump -u root -psenha MuOnline | gzip > /backup/mu_$(date +\%F).sql.gz

Erros comuns e soluções

SintomaCausa provávelSolução
GameServer não inicia, erro de tabela crashedTabela MyISAM corrompidaRode myisamchk -r ou REPAIR TABLE com o serviço parado
InnoDB não sobe de jeito nenhumCorrupção no tablespace ou redo logUse innodb_force_recovery incremental e faça dump para reinstalar limpo
Personagens/itens sumiram após a corrupçãoReparo incompleto ou dados irrecuperáveisRestaure do último backup válido e compare contagens de linhas
Corrupção volta a acontecer periodicamenteCausa raiz não identificada (disco, energia, processo)Verifique SMART do disco e forma de encerramento do MySQL
Backup mais recente também corrompidoBackup feito durante a corrupção, sem verificação préviaValide integridade do dump/backup antes de sobrescrever versões anteriores

Checklist de recuperação de banco corrompido

  • GameServer e demais processos parados antes de qualquer ação.
  • Cópia bruta dos arquivos de dados feita antes do reparo.
  • Motor de armazenamento identificado (MyISAM, InnoDB, Aria).
  • Reparo tentado com a ferramenta apropriada ao motor.
  • Restauração de backup realizada caso o reparo não seja suficiente.
  • Integridade verificada (contagem de linhas, CHECK TABLE) antes de liberar o servidor.
  • Causa raiz investigada (disco, energia, encerramento abrupto).
  • Rotina de backup automatizada e armazenada fora da máquina principal.

Com o banco recuperado e uma rotina de backup implementada, vale revisar toda a infraestrutura do servidor para reduzir outros pontos de falha antes que se tornem incidentes. Consulte o tutorial de criação de servidor de MU Online para revisar os fundamentos completos da configuração do seu ambiente.

Perguntas frequentes

É possível recuperar 100% dos dados de uma tabela corrompida sem backup?

Na maioria das vezes não. Ferramentas como myisamchk/mysqlcheck conseguem recuperar parte significativa dos dados em tabelas MyISAM corrompidas, mas registros no meio de blocos danificados costumam ser perdidos permanentemente. Backup regular é a única garantia real contra perda total.

InnoDB corrompe com a mesma frequência que MyISAM?

Não. InnoDB tem journaling (redo log) que protege contra a maioria das corrupções causadas por quedas de energia ou encerramento abrupto do processo, recuperando automaticamente na inicialização. MyISAM não tem esse mecanismo, sendo mais vulnerável a corrupção nesses cenários — por isso muitos emuladores de MU migraram tabelas críticas para InnoDB.

Como sei se a corrupção foi causada por hardware (disco) ou por encerramento indevido do MySQL?

Rode um teste de saúde do disco (SMART, smartctl no Linux ou utilitário do fabricante no Windows) logo após identificar a corrupção. Se o disco reportar setores defeituosos ou erros de leitura, o problema é de hardware e a corrupção tende a se repetir até o disco ser substituído. Se o disco estiver saudável, o mais provável é encerramento abrupto do MySQL (queda de energia, kill do processo, falta de espaço em disco).

Posso simplesmente restaurar o backup mais recente sem investigar a causa?

Pode resolver o sintoma imediato, mas sem identificar a causa (disco com problema, falta de espaço, encerramento incorreto do serviço) a corrupção tende a se repetir. Sempre investigue a causa raiz em paralelo à restauração, para não ficar em um ciclo de corrupção recorrente.

Rodar CHECK TABLE regularmente previne corrupção?

Não previne, mas detecta problemas cedo, antes que se tornem graves o suficiente para derrubar o GameServer ou causar perda visível de progresso de jogadores. Vale rodar CHECK TABLE periodicamente como parte da rotina de manutenção, junto com backups regulares.

RO
Fundador e editor-chefe

Rodrigo mantém o ViciadosMU desde os primórdios do portal. Especialista em criação e administração de servidores de MU Online, história do jogo e a evolução das seasons — escreveu boa parte do acervo antes de 2024.

Continue lendo

Artigos relacionados