CLI AI

Fazer backup de uma única tabela MySQL e restaurar só ela

2026-08-16

mysqldump -u root -p --single-transaction shop orders --result-file=orders.sql exporta uma tabela do banco, e mysql shop < orders.sql a devolve sem encostar em nenhuma outra. A resposta curta esconde duas coisas: o dump começa com DROP TABLE IF EXISTS, e o --where deixa você exportar só as linhas que interessam.

1. Exportar uma tabela

clai
$ clai faça o dump da tabela orders do banco shop→ mysqldump -h my8 -uroot -p --single-transaction shop orders --result-file=orders.sql

Primeiro vem o nome do banco, depois as tabelas separadas por espaço. O --single-transaction tira um dump do InnoDB sem travar — num banco em produção essa flag não é opcional. --result-file no lugar de > preserva as quebras de linha e impede que texto de erro caia dentro do dump.

2. O que existe num dump desses

clai
$ clai mostre as linhas significativas do dump→ grep -E 'DROP TABLE|CREATE TABLE|INSERT INTO' orders.sqlDROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` (INSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(2,'globex'

Aqui está a parte que ninguém menciona. A primeiríssima instrução é DROP TABLE IF EXISTS. Restaurar esse arquivo não mistura dados com os atuais: substitui a tabela pelo estado dela no momento do dump.

3. Só a estrutura, sem linhas

clai
$ clai exporte só a estrutura da tabela orders→ mysqldump -h my8 -uroot -p --no-data shop orders --result-file=schema.sql

--no-data mantém o CREATE TABLE e descarta todo INSERT — verificado, o arquivo não tem uma inserção sequer. Ótimo para comparar com diff o esquema de produção e o de homologação.

4. Exportar só as linhas necessárias

clai
$ clai exporte só os pedidos de agosto→ mysqldump -h my8 -uroot -p --single-transaction --where="created >= '2026-08-01'" shop orders --result-file=august.sqlINSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(3,'initech',45.20,'2026-08-10');

Entraram duas linhas de três — o pedido de julho ficou de fora. A linha acima é o INSERT do arquivo gerado. É assim que se fazem extrações cirúrgicas: por data, por cliente, por faixa de id.

5. Restaurar uma tabela num banco em produção

clai
$ clai restaure a tabela orders a partir do dump→ mysql -h my8 -uroot -p shop < orders.sql

Verificado num banco real: orders tinha 2 linhas antes da restauração e 3 depois, enquanto a tabela vizinha customers continuou exatamente como estava. É assim que se reverte uma tabela sem incomodar as demais.

6. O mesmo dump em outro banco

clai
$ clai carregue o dump da tabela no banco shop_copy→ mysql -h my8 -uroot -p shop_copy < orders.sql

Um dump de tabela única não traz CREATE DATABASE nem USE, então o destino é escolhido pelo argumento que você dá ao mysql. Verificado: o shop_copy ficou com uma tabela orders e as três linhas.

Gotchas

  • Um dump de tabela única começa com DROP TABLE. Tudo que foi escrito naquela tabela depois do dump some na restauração. Quando você realmente quer acrescentar, exporte com --no-create-info.
  • --no-create-info esbarra na chave primária. Verificado: carregar esse arquivo sobre linhas existentes dá ERROR 1062 (23000) at line 24: Duplicate entry '1' for key 'orders.PRIMARY'. Acrescentar só funciona para linhas novas — limpe a tabela antes, ou use --insert-ignore ou --replace.
  • Sem --single-transaction o dump trava a tabela. No MyISAM não tem jeito; no InnoDB é uma indisponibilidade autoinfligida em pleno expediente.

Related questions

Como exporto várias tabelas? Basta listar: mysqldump shop orders customers. O inverso é --ignore-table=shop.logs, que exclui uma.

Como comprimo o dump na hora? mysqldump … | gzip > dump.sql.gz, e restaura com zcat dump.sql.gz | mysql shop. Isso não combina com --result-file, que grava o arquivo por conta própria.

Como o mysqldump se compara ao mysqlpump e ao mydumper? Os dois concorrentes exportam em paralelo e ganham em bancos grandes, mas o mysqldump está em todo lugar e a saída dele um humano consegue ler.

See also

O CliAI escreve a linha de dump com as flags que a situação pede e mostra antes que ela encoste no banco. Instale em uma linha.