⚔️ Guerra no MySQL – O dia que uma simples atividade apagou dados sensíveis… e a DBAOnline estava lá para o socorro.

Se você trabalha com bancos de dados, um dia acabará vivenciando aqueles famosos problemas que se tornam uma história a ser contada. As famosas histórias de guerra — daquelas que fazem um DBA suar frio e o MySQL tremer na base.

E, a seguir, vamos mencionar uma delas.

🕗 Dezembro… o mês mais aguardado para pessoas normais e o mais temido para aqueles que são DBA’s.

Numa certa manhã, havíamos recebido um alarme comum de atraso no sincronismo entre uma base PRIMARY e REPLICA. E assim, como padrão, fizemos os levantamentos do que justificaria esse atraso.

Notamos um comando peculiar sendo replicado via System User:

➡️ DELETE FROM name_table WHERE column_date >= ‘2025-11-28 00:00:00’.

Um comando aparentemente simples, mas executado sem um limite de escopo temporal adequado.

Assim, em contato com a gestão da aplicação, explicamos o tal “problema” e, via logs, exibimos os comandos executados.

Contexto desta execução: “Entre os dias 28/11 e 01/12 não havia necessidade de certos dados…, mas o complemento do filtro não deve ter funcionado.” 😨😨😨

🧙🏻‍♂️ Então… os MAGOS da DBAOnline entraram em ação para a restauração dos dados deletados. 🧙🏻‍♂️

Fizemos a restauração do backup completo (Full), realizado no dia 27/11, concluído às 03 horas da manhã, em uma base de Homologação.

Partimos para a restauração e, após a conclusão dessa primeira etapa, precisaríamos restaurar os BINLOGS da máquina produtiva até chegarmos exatamente uma posição anterior à deleção dos dados.

Então, iniciamos a aplicação dos binlogs da máquina PRIMARY diretamente nessa base de Homologação (que continha a restauração de um backup feito na base REPLICA).

Foram praticamente 6 binlogs restaurados.

Agora… para animar aquela noite/madrugada, os 3 últimos binlogs tinham que relatar problemas.

O backup feito na base REPLICA não possuía 10 tabelas que, por regras, não replicamos através do ambiente PRIMARY, devido ao uso da variável “replicate-ignore-table”. Assim, os binlogs da PRIMARY possuíam instruções para essas tabelas. Não podíamos simplesmente criá-las no ambiente de Homologação, pois as instruções contidas no binlog eram operações de deleção ou update — e, em uma tabela sem registros, haveria erros.

Então, seguimos com o comando:

➡️

E, para finalizar corretamente a uma posição antes do comando executado (delete), utilizamos o mesmo contexto adicionando somente a condição stop-datetime:

➡️

Obviamente, a cada aplicação de binlog efetuada na base de Homologação, definíamos uma tabela no sistema e realizávamos o COUNT em períodos de datas para comparações. Ao final do processo, as validações foram realizadas com sucesso; os dados necessários a serem retomados estavam na máquina de Homologação.

🔍 Lições aprendidas nesta batalha.

Essa história deixou 4 mensagens importantes — tanto para o time DBAOnline quanto para qualquer empresa que utiliza o MySQL:

  1. BACKUP não é opcional… é obrigatório.
    Se não tivéssemos backups a serem restaurados, não teríamos esta história.
    E “backup só é backup depois que é restaurado”.

  2. BINLOGS são os salva-vidas.
    Sem binlogs, o cliente teria perdido horas de dados.
    Até porque, não adianta backup sem binlogs — o RPO vai para o espaço.

  3. Acidentes acontecem — processos evitam desastres.
    Testes e validações antes são sempre importantes numa execução; revisão de permissões para cada usuário.

  4. Ter um time especializado muda o desfecho.
    MySQL exige um conhecimento profundo de arquitetura, recovery e consistência.

🧨 Desfecho — Toda guerra deixa algumas experiências.

A DBAOnline voltou para casa naquele dia mais experiente, com mais reforços nos processos e com a certeza de que:

“No campo de batalha dos dados, não vence quem nunca erra — vence quem sabe se levantar rapidamente”.

Referências:
https://www.dbaonline.com.br/

COMPARTILHE:
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
PARCEIROS