Extrair uma única tabela de um dump MySQL

Tem um dump de 7 GB com 127 tabelas, mas localmente só precisa de três delas — users, orders, products. Veja porque os truques habituais com sed/grep falham e como extrair exatamente as tabelas que quer (com as suas chaves estrangeiras) em poucos cliques.

Nem todos os trabalhos precisam da base de dados inteira. Quando desenvolve uma funcionalidade localmente, raramente quer um dump de produção completo a encher o seu disco e a demorar uma hora a importar. Quer o punhado de tabelas que a funcionalidade realmente toca.

O mesmo vale quando está a depurar uma única tabela — reproduzir um problema de dados em orders não exige as outras 126 tabelas — ou a fazer uma migração parcial, em que só algumas tabelas mudam para um novo serviço. Em todos estes casos a pergunta é a mesma: como tiro apenas estas tabelas de um dump gigante, de forma limpa e rápida?

A abordagem sed/grep e porque falha

A resposta clássica é fatiar o ficheiro com sed entre os cabeçalhos de secção que o mysqldump escreve para cada tabela:

# extrair a tabela users de um ficheiro mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Parece engenhoso e, num dump pequeno e arrumado, pode até funcionar uma vez. Num ficheiro real de 7 GB desmorona-se de imensas formas subtis:

Acaba a empilhar awk sobre grep sobre sed, a testar em subconjuntos e ainda sem confiar no resultado. Há uma forma melhor.

Extrair tabelas com o DumpCleaner

O DumpCleaner faz o parse do dump como deve ser — compreende as fronteiras das instruções, os INSERTs multilinha, os backticks e os comentários — por isso corta sempre nas linhas certas. Extrair as tabelas de que precisa leva quatro passos:

  1. Arraste o seu dump .sql para dentro. O DumpCleaner percorre o ficheiro em streaming, por isso um dump de 7 GB abre com memória constante em vez de carregar tudo.
  2. Leia a lista de tabelas detetada automaticamente. Cada tabela é extraída e listada com a sua contagem de linhas e o seu tamanho — sem percorrer milhões de linhas para descobrir o que lá está.
  3. Escolha as tabelas que quer. Marque users, orders e products, ou escreva um padrão regex / de exclusão como *_logs para eliminar grupos inteiros de uma só vez.
  4. Inclua os pais das chaves estrangeiras e exporte. Opcionalmente, traga automaticamente as tabelas pai referenciadas e depois exporte um ficheiro limpo e importável.

Algumas coisas tornam isto bem menos trabalhoso do que as ferramentas de shell:

Apenas as tabelas de que precisa — nada mais

O DumpCleaner extrai tabelas específicas de dumps de qualquer tamanho — em streaming, com memória constante e com as chaves estrangeiras resolvidas por si. Aplicação nativa para macOS e iPadOS, compra única.

Descarregar na App Store

Perguntas frequentes

Posso extrair várias tabelas ao mesmo tempo?

Sim. Marque as tabelas que quiser — users, orders e products em conjunto — e o DumpCleaner escreve-as todas num único ficheiro numa só passagem.

Mantém as dependências de chaves estrangeiras?

Opcionalmente, sim. Ative incluir dependências de chaves estrangeiras e qualquer tabela pai referenciada pela sua seleção é trazida automaticamente, para que a extração importe sem erros de restrição.

Posso excluir tabelas por padrão?

Sim. Use padrões de exclusão como *_logs ou *_sessions, ou uma expressão regular, para eliminar grupos inteiros de tabelas em vez de as desmarcar uma a uma.

Funciona com o PostgreSQL?

Sim. O DumpCleaner lê dumps de MySQL, MariaDB e PostgreSQL (pg_dump) e lida com nomes qualificados por esquema, como public.users, ao extrair tabelas.

Deixe de lutar com o sed e o grep

Arraste, escolha as suas tabelas, exporte. O DumpCleaner extrai exatamente as tabelas de que precisa — com as suas chaves estrangeiras — de qualquer dump.

Descarregar na App Store