CLI AI

Copiar una sola tabla de MySQL y restaurar solo esa

2026-08-16

mysqldump -u root -p --single-transaction shop orders --result-file=orders.sql vuelca una tabla de la base, y mysql shop < orders.sql la devuelve a su sitio sin tocar ninguna otra. La respuesta corta esconde dos cosas: el volcado empieza con DROP TABLE IF EXISTS, y con --where puedes volcar solo las filas que te importan.

1. Volcar una tabla

clai
$ clai haz un volcado de la tabla orders de la base shop→ mysqldump -h my8 -uroot -p --single-transaction shop orders --result-file=orders.sql

Primero va el nombre de la base y después las tablas, separadas por espacios. --single-transaction toma un volcado de InnoDB sin bloquear: en una base viva ese flag no es opcional. --result-file en lugar de > conserva los saltos de línea y evita que el texto de un error acabe dentro del volcado.

2. Qué contiene ese volcado

clai
$ clai muestra las líneas significativas del volcado→ 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'

Aquí está lo que nadie menciona. La primera instrucción es DROP TABLE IF EXISTS. Restaurar este archivo no fusiona datos con los actuales: reemplaza la tabla por su estado en el momento del volcado.

3. Solo la estructura, sin filas

clai
$ clai vuelca solo la estructura de la tabla orders→ mysqldump -h my8 -uroot -p --no-data shop orders --result-file=schema.sql

--no-data conserva el CREATE TABLE y elimina todos los INSERT — verificado, el archivo no contiene ni una inserción. Práctico para comparar con diff el esquema de producción y el de pruebas.

4. Volcar solo las filas que necesitas

clai
$ clai vuelca solo los 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');

Entraron dos filas de tres: el pedido de julio quedó fuera. La línea de arriba es el INSERT del archivo resultante. Así se hacen extractos quirúrgicos: por fecha, por cliente, por rango de id.

5. Restaurar una tabla en una base viva

clai
$ clai restaura la tabla orders desde el volcado→ mysql -h my8 -uroot -p shop < orders.sql

Verificado contra una base viva: orders tenía 2 filas antes de restaurar y 3 después, mientras la tabla vecina customers quedó exactamente igual. Así se revierte una tabla sin molestar a las demás.

6. El mismo volcado en otra base

clai
$ clai carga el volcado de la tabla en la base shop_copy→ mysql -h my8 -uroot -p shop_copy < orders.sql

Un volcado de una sola tabla no contiene CREATE DATABASE ni USE, así que el destino lo elige el argumento que le das a mysql. Verificado: shop_copy acabó con una tabla orders y sus tres filas.

Gotchas

  • Un volcado de una tabla empieza con DROP TABLE. Todo lo escrito en esa tabla después del volcado desaparece al restaurar. Cuando de verdad quieres añadir, vuelca con --no-create-info.
  • --no-create-info choca con la clave primaria. Verificado: cargar ese archivo sobre filas existentes da ERROR 1062 (23000) at line 24: Duplicate entry '1' for key 'orders.PRIMARY'. Añadir solo funciona con filas nuevas: vacía la tabla antes, o usa --insert-ignore o --replace.
  • Sin --single-transaction el volcado bloquea la tabla. En MyISAM es inevitable; en InnoDB es una caída que te provocas tú mismo en pleno día.

Related questions

¿Cómo vuelco varias tablas? Enumerándolas: mysqldump shop orders customers. El inverso es --ignore-table=shop.logs, que excluye una.

¿Cómo comprimo el volcado al vuelo? mysqldump … | gzip > dump.sql.gz, y para restaurar zcat dump.sql.gz | mysql shop. No se combina con --result-file, que escribe el archivo por su cuenta.

¿Qué tal mysqldump frente a mysqlpump y mydumper? Los dos competidores vuelcan en paralelo y ganan en bases grandes, pero mysqldump está en todas partes y su salida la lee un humano.

See also

CliAI escribe la línea del volcado con los flags que pide la situación y la muestra antes de que toque la base. Instálalo en una línea.