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:
- INSERTs multilinha. Um único
INSERT INTO ... VALUESpode estender-se por milhares de linhas. Ferramentas orientadas a linhas como osede ogrepcortam essas linhas a meio e produzem um ficheiro que não faz parse. - Backticks e caracteres especiais. Os valores das colunas contêm
--, ponto e vírgula, backticks, aspas e quebras de linha dentro das strings. O seu padrão corresponde a texto dentro dos dados que nunca foi pensado para ser um delimitador. - Nomes de tabelas como substrings. Extrair
usertambém apanhauser_roles,user_sessionsepassword_user, porque o nome aparece como substring de outros. - Comentários e cabeçalhos variam. O texto exato dos comentários difere entre as versões do MySQL, do MariaDB e do PostgreSQL, e o
pg_dumpnem sequer usa os mesmos cabeçalhos — por isso o mesmo comando devolve nada em silêncio. - Sem consciência de chaves estrangeiras. Mesmo que fatie
ordersna perfeição, as suas linhas referenciamusers. Osednão faz ideia disso, por isso a extração falha na importação com um erro de chave estrangeira.
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:
- Arraste o seu dump
.sqlpara 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. - 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á.
- Escolha as tabelas que quer. Marque
users,orderseproducts, ou escreva um padrão regex / de exclusão como*_logspara eliminar grupos inteiros de uma só vez. - 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:
- Padrões de exclusão como
*_logsou*_sessionseliminam o ruído de auditoria e de sessões sem desmarcar dezenas de tabelas à mão. - Filtros regex permitem-lhe corresponder por prefixo, sufixo ou qualquer padrão — mantenha tudo o que corresponde a
shop_*, por exemplo. - Uma pré-visualização em tempo real mostra exatamente que tabelas ficarão na saída à medida que muda a seleção.
- Um tamanho de saída estimado diz-lhe quão grande será a extração antes de exportar, para que saiba que cabe localmente.
- As dependências de chaves estrangeiras podem ser incluídas automaticamente, por isso escolher
orderstraz discretamenteusersconsigo e a extração importa sem erros de restrição.
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 StorePerguntas 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