Como Recuperar um Banco de Dados MySQL Após Excluir Arquivos ou uma Partição no Ubuntu: RAID 6 e LUKS2
Excluir arquivos ou uma partição inteira de disco no Ubuntu pode levar a uma perda crítica de dados, especialmente se um banco de dados MySQL estiver em execução no servidor. A situação torna-se ainda mais complexa quando o sistema de armazenamento é construído sobre uma matriz RAID 6 e os dados estão adicionalmente protegidos com criptografia LUKS2. Nessas condições, as ferramentas padrão de recuperação nem sempre produzem o resultado esperado, e ações descuidadas podem destruir permanentemente as informações. Neste artigo, analisaremos possíveis cenários de perda de dados, as particularidades do trabalho com RAID 6 e LUKS2 e o processo de recuperação de um banco de dados MySQL após a exclusão acidental de arquivos ou de uma partição de disco.

- Preparando o ambiente de teste e o banco de dados MySQL
- Conectando os discos para análise
- Como recuperar um banco de dados MySQL excluído de RAID 6 + LUKS2
- PASSO 1. Detecção automática de partições RAID 6 e LUKS
- PASSO 2. Desbloqueio e recuperação de arquivos excluídos
- PASSO 3. Restaurando o banco de dados a partir de um dump SQL
- PASSO 4. Restaurando o banco de dados a partir de arquivos físicos do MySQL
- PASSO 5. Restaurando a estrutura da tabela a partir de arquivos ibd
- PASSO 6. Associando os arquivos ibd recuperados
- Conclusão
- Perguntas frequentes
- Comentários
Os arquivos de banco de dados MySQL e seus backups em um servidor Linux podem ficar inacessíveis por diversos motivos: exclusão acidental de arquivos, formatação ou exclusão de uma partição, corrupção do sistema de arquivos, falha da matriz RAID, falha de disco ou falha do controlador RAID. A situação torna-se ainda mais complicada se os dados estiverem armazenados em uma partição LUKS2 criptografada.
Hetman RAID Recovery ajuda a reconstruir estruturas de matrizes RAID, localizar partições perdidas, desbloquear LUKS2 se a senha estiver disponível e recuperar arquivos de banco de dados e dumps SQL.
Demonstramos o programa em um computador com Windows. No entanto, o Hetman RAID Recovery também está disponível para Linux e macOS.
How to Recover Oracle Database 26ai from LVM RAID 6 + LUKS2 via SSH
Preparando o ambiente de teste e o banco de dados MySQL
Para os testes, usamos um servidor Dell PowerEdge R710 com um controlador PERC H700.
| Parâmetro | Especificação |
|---|---|
| Modelo do servidor | Dell PowerEdge R710 |
| Formato | Rack 2U |
| Processador | Até 2 × Intel Xeon série 5500/5600 |
| RAM | DDR3 ECC, até 288 GB (18 slots) |
| Controlador RAID | Dell PERC H700 |
| Tipo de RAID | RAID de hardware |
| Níveis de RAID suportados | RAID 0, 1, 5, 6, 10, 50, 60 |
| Configuração da matriz | RAID 6 |
| Interface das unidades | SAS/SATA, até 6 Gbit/s |
| Número de baias para unidades | Até 6 × 3,5″ ou 8 × 2,5″, dependendo da configuração |
| Cache do controlador RAID | 512 MB ou 1 GB (dependendo do modelo) |
| Proteção do cache | BBU — proteção de cache com bateria |
| Sistema operacional | Ubuntu Server |
| Criptografia de dados | LUKS2 (no nível do Linux, não no controlador RAID) |
| Sistema de gerenciamento de banco de dados | MySQL |
| Tolerância a falhas do RAID 6 | Permite a falha simultânea de até dois discos |
| Ferramentas de diagnóstico | Dell OpenManage, MegaCLI, StorCLI (se compatível) |
Para fornecer ao sistema operacional acesso direto a cada disco físico, foram criadas seis matrizes RAID 0 de um único disco no controlador — uma para cada disco. O Ubuntu Server 24.04 foi instalado em uma delas, e as outras quatro foram combinadas em uma matriz MD RAID 6 por software por meio do Cockpit.
Uma tabela de partição GPT e três partições foram criadas na matriz, com ext4 como sistema de arquivos e criptografia LUKS2 selecionada para cada uma delas.

O diretório mysql-data foi colocado na terceira partição e continha dados do banco de dados de teste company_db, arquivos do sistema e logs do MySQL. Foi utilizada a versão MySQL 8.0.46.

O próprio banco de dados continha as tabelas customers, products e orders, além de uma view, um procedimento armazenado e uma função.

O backup do banco de dados foi criado no MySQL Workbench como um dump SQL e salvo no diretório mysql-backups.
Antes dos testes, os diretórios mysql-data e mysql-backups foram copiados da terceira partição para a segunda. Em seguida, a segunda partição foi excluída por meio do Cockpit, e os arquivos do banco de dados e o dump SQL foram excluídos da terceira partição usando Shift + Delete, ignorando a Lixeira. Isso preparou dois cenários: recuperação de arquivos de uma partição excluída e recuperação de arquivos excluídos de uma partição preservada.

Conectando os discos para análise
No nosso caso, os discos que participavam do RAID 6 foram conectados a um computador Windows por meio de uma estação de acoplamento USB, e o Hetman RAID Recovery foi iniciado para análise.
Além de trabalhar com discos físicos, o programa oferece suporte à análise de imagens completas de disco byte a byte. Essas imagens podem ser criadas diretamente no Hetman RAID Recovery usando a função Salvar disco e armazenadas em outro disco íntegro.

Isso é especialmente útil se o disco estiver instável, tiver setores defeituosos ou apresentar erros de leitura. A criação de uma imagem preserva os dados legíveis e permite que a cópia seja analisada posteriormente, reduzindo o número de acessos repetidos ao disco problemático.
Se os discos permanecerem no servidor Linux e estiverem legíveis, eles podem ser analisados remotamente. Para isso, conecte-se ao servidor via SSH no Hetman RAID Recovery e obtenha acesso aos seus dispositivos de bloco.
Como recuperar um banco de dados MySQL excluído de RAID 6 + LUKS2
PASSO 1. Detecção automática de partições RAID 6 e LUKS
Imediatamente após a inicialização, o Hetman RAID Recovery detectou automaticamente a configuração MD RAID 6 e reconstruiu sua estrutura para análise.

O painel direito exibe os principais parâmetros da matriz: tipo e estado do RAID, ordem e tamanho dos blocos, bem como a lista dos discos participantes com sua sequência, offsets e tamanhos.

Na matriz montada, o programa detectou três partições, incluindo a segunda, anteriormente excluída, e identificou criptografia LUKS em todas as três. Antes de inserir a senha, seus sistemas de arquivos não são exibidos — as partições precisam ser desbloqueadas para análise posterior.
A segunda partição é exibida na interface como espaço não alocado marcado como LUKS. Isso significa que o programa reconheceu os metadados do contêiner criptografado no local da partição excluída.

PASSO 2. Desbloqueio e recuperação de arquivos excluídos
Para iniciar a análise, clique duas vezes na partição necessária. Como ela está criptografada com LUKS2, o programa solicitará que você insira uma senha ou especifique um arquivo de chave. Insira a senha e clique em Desbloquear.

Primeiro, selecione Verificação rápida. Aguarde a conclusão da verificação, após a qual o programa abrirá a estrutura dos diretórios encontrados. Em nosso teste, a verificação rápida encontrou os arquivos necessários na partição excluída.
Se os dados necessários não forem encontrados no seu caso, volte à seleção do tipo de análise e execute a Análise completa, especificando o sistema de arquivos EXT2/3/4.

Revise os resultados da verificação. No nosso caso, o programa exibiu o dump SQL backup1.sql, o diretório company_db e os arquivos de tabela do MySQL com a extensão .ibd. O conteúdo do dump SQL pode ser verificado na janela de visualização.

Selecione os arquivos e pastas que deseja recuperar e clique em Recuperar. Escolha um método de salvamento, especifique outro disco físico e mantenha ativada a opção de restaurar a estrutura de diretórios.
Não salve os arquivos encontrados na mesma unidade da qual estão sendo recuperados, para evitar a substituição de outros dados perdidos.

PASSO 3. Restaurando o banco de dados a partir de um dump SQL
A forma mais simples de restaurar o banco de dados é usar o dump SQL recuperado. Ele contém comandos para criar a estrutura do banco de dados e restaurar os dados conforme estavam no momento em que o backup foi criado. Se as opções de exportação apropriadas tiverem sido selecionadas, o dump também incluirá views, procedimentos e funções.
Inicie o MySQL Workbench e conecte-se ao servidor MySQL. Abra o menu Servidor — Importação de Dados, selecione Importar de arquivo autônomo e especifique o arquivo SQL recuperado.

Se o diretório inteiro mysql-data com os arquivos de sistema do MySQL foi perdido, primeiro você precisa restaurar a funcionalidade do servidor ou preparar uma nova instância do MySQL. Somente então o dump poderá ser importado por meio do Workbench.
Selecione o esquema de destino ou crie um novo banco de dados company_db e clique em Iniciar importação. Aguarde a conclusão da operação e verifique o log em busca de erros.

Atualize a lista de esquemas. O banco de dados agora deve conter as tabelas customers, products e orders. Abra-as e verifique os registros.

PASSO 4. Restaurando o banco de dados a partir de arquivos físicos do MySQL
Se não houver um dump SQL adequado, mas o Hetman RAID Recovery tiver conseguido recuperar o diretório do banco de dados com arquivos de tabela, você pode tentar uma recuperação física.
No nosso caso, o diretório company_db preservou os arquivos customers.ibd, products.ibd e orders.ibd. Cada um deles contém os dados e índices da tabela InnoDB correspondente.

Simplesmente copiar esses arquivos para o diretório MySQL não é suficiente. O novo servidor ainda não possui definições para as tabelas correspondentes no dicionário de dados. Portanto, a recuperação consiste em duas etapas: primeiro, é necessário recriar a estrutura da tabela e, em seguida, associar a ela os arquivos .ibd recuperados.
Para a recuperação, prepare um servidor operacional com a mesma versão do MySQL. Conecte-se a ele por meio do Workbench e crie um banco de dados vazio.

Se o script SQL original com a estrutura estiver preservado, execute os comandos CREATE TABLE nele contidos. As tabelas devem corresponder exatamente às originais, incluindo tipos de coluna, chaves, índices, collation e formato de linha. Não é necessário executar os comandos de inserção de dados — nesta etapa, as tabelas devem permanecer vazias.
PASSO 5. Restaurando a estrutura da tabela a partir de arquivos ibd
Se o script SQL original não estiver disponível, você pode tentar recuperar a estrutura da tabela a partir dos arquivos .ibd. No MySQL 8.0, eles contêm SDI — os metadados do dicionário de dados. O utilitário ibd2sdi é usado para lê-los.
Execute-o para cada arquivo recuperado e salve os resultados em formato JSON. No nosso caso, obtivemos metadados de customers.ibd, products.ibd e orders.ibd, e então usamos jq para inspecionar a definição da tabela customers.

Os metadados podem incluir o nome da tabela, a versão do MySQL, o mecanismo de armazenamento, a collation e os parâmetros do tablespace. Eles também contêm as definições das colunas. As informações sobre chaves primárias e exclusivas, índices secundários e relacionamentos com outras tabelas são armazenadas separadamente.
O JSON resultante pode ser analisado manualmente em um editor de texto. Com base nos parâmetros detectados, scripts e conversores especiais podem gerar automaticamente comandos preliminares CREATE TABLE. Para um grande número de tabelas, isso acelera significativamente a recuperação da estrutura.

PASSO 6. Associando os arquivos ibd recuperados
No Workbench, desative temporariamente as verificações de chaves estrangeiras e execute o comando ALTER TABLE … DISCARD TABLESPACE para cada tabela criada. Isso desvincula o tablespace vazio criado e prepara a tabela para a associação do arquivo recuperado.

Depois disso, copie os arquivos .ibd correspondentes para o diretório do banco de dados no servidor preparado. Após a cópia, não se esqueça de atribuir o proprietário mysql aos arquivos e definir as permissões de acesso necessárias.

Volte ao Workbench e execute ALTER TABLE … IMPORT TABLESPACE para cada tabela. Avisos sobre arquivos .cfg ausentes não são críticos: o MySQL continuará a importação sem validação automática da estrutura. O MySQL registrará os tablespaces recuperados e associará os dados e índices às definições de tabela criadas anteriormente.

Após uma importação bem-sucedida, reative as verificações de chaves estrangeiras. Atualize a lista de esquemas e verifique o número e o conteúdo dos registros usando consultas SELECT.

Os arquivos .ibd permitem restaurar tabelas, seus dados e índices. No entanto, views, procedimentos e funções não são armazenados como arquivos separados no diretório company_db. Se não estiverem incluídos no dump SQL, esses objetos deverão ser recriados manualmente.
Após verificar o banco de dados restaurado, recomendamos criar um novo backup no formato de dump SQL.
Conclusão
Usando o Hetman RAID Recovery, foi possível reconstruir automaticamente a estrutura de Linux MD RAID 6 e detectar e desbloquear contêineres LUKS2 usando a senha conhecida. Uma verificação rápida encontrou os arquivos necessários tanto após sua exclusão quanto após a exclusão de uma partição inteira.
O dump SQL recuperado pode ser importado por meio do MySQL Workbench, restaurando a estrutura e os dados do banco de dados ao estado em que o backup foi criado. Se não houver um dump adequado disponível, tabelas InnoDB individuais podem ser recuperadas de arquivos .ibd, recriando primeiro sua estrutura.







