Dump de una tabla
En muchas situaciones no necesitas respaldar toda la base de datos, sino solo una o varias tablas específicas. Quizás quieres migrar una tabla de un servidor a otro, hacer una copia de seguridad antes de una operación arriesgada, o exportar datos para compartirlos con otro equipo. La herramienta mysqldump permite exportar tablas individuales de forma sencilla y precisa.
Exportar una tabla
Para exportar una tabla específica, pasa el nombre de la base de datos seguido del nombre de la tabla:
mysqldump -u root -p tienda_mysql productos > productos_backup.sqlEl archivo resultante contiene la sentencia CREATE TABLE y todas las sentencias INSERT necesarias para recrear la tabla con sus datos:
DROP TABLE IF EXISTS `productos`;
CREATE TABLE `productos` (
`id` int NOT NULL AUTO_INCREMENT,
`nombre` varchar(200) NOT NULL,
`precio` decimal(10,2) NOT NULL,
`stock` int DEFAULT '0',
`categoria_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_categoria` (`categoria_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `productos` VALUES
(1,'iPhone 15 Pro',1299.99,45,6),
(2,'Samsung Galaxy S24',899.99,62,6),
(3,'Google Pixel 8',699.00,38,6);A diferencia del backup de una base de datos completa, el dump de una tabla no incluye CREATE DATABASE ni USE, ya que se asume que la base de datos destino ya existe.
Exportar múltiples tablas
Puedes especificar varias tablas separándolas con espacios:
mysqldump -u root -p tienda_mysql productos categorias > productos_categorias.sqlEl archivo resultante contiene las sentencias para ambas tablas en orden. Esto es útil cuando las tablas tienen relaciones entre sí y quieres mantener la consistencia.
# Exportar las tablas relacionadas con pedidos
mysqldump --single-transaction -u root -p tienda_mysql \
pedidos detalle_pedidos envios > pedidos_completos.sqlExportar solo la estructura de una tabla
Si necesitas únicamente la definición de la tabla sin datos, usa --no-data:
mysqldump --no-data -u root -p tienda_mysql productos > productos_esquema.sqlEl archivo contiene solo la sentencia CREATE TABLE con la definición completa de columnas, índices y restricciones. Esto es particularmente útil para crear tablas idénticas en otros entornos o para documentar la estructura.
Exportar solo los datos
Lo contrario: exportar los datos sin la estructura de la tabla:
mysqldump --no-create-info -u root -p tienda_mysql productos > productos_datos.sqlEl archivo contiene solo las sentencias INSERT. Esto se usa cuando la tabla destino ya existe con la misma estructura y solo necesitas cargar o actualizar los datos.
Exportar un subconjunto de filas con --where
La opción --where permite filtrar las filas exportadas con una condición SQL, como si añadieras una cláusula WHERE a la consulta de extracción:
# Exportar solo productos de una categoría específica
mysqldump -u root -p tienda_mysql productos --where="categoria_id = 6" > productos_smartphones.sqlLa condición se aplica directamente en la consulta que mysqldump ejecuta internamente. Puedes usar cualquier expresión válida en un WHERE:
# Exportar pedidos del último mes
mysqldump --single-transaction -u root -p tienda_mysql pedidos \
--where="fecha_pedido >= '2026-01-01'" > pedidos_enero.sql
# Exportar los 1000 productos más vendidos
mysqldump -u root -p tienda_mysql productos \
--where="id IN (SELECT producto_id FROM detalle_pedidos GROUP BY producto_id ORDER BY SUM(cantidad) DESC LIMIT 1000)" \
> productos_mas_vendidos.sql
# Exportar clientes de una región
mysqldump -u root -p tienda_mysql clientes \
--where="ciudad IN ('Madrid', 'Barcelona', 'Valencia')" > clientes_levante.sqlLa opción --where es extremadamente útil para tablas grandes cuando solo necesitas un subconjunto de datos.
Tablas grandes: consideraciones de rendimiento
Cuando la tabla tiene millones de filas, el archivo de dump puede ser muy grande y tanto la exportación como la restauración pueden tardar considerablemente.
La compresión reduce el tamaño del archivo de forma drástica:
# Comprimir la salida directamente
mysqldump --single-transaction -u root -p tienda_mysql detalle_pedidos \
| gzip > detalle_pedidos.sql.gzPara tablas InnoDB, usa siempre --single-transaction para evitar bloqueos:
mysqldump --single-transaction --quick -u root -p tienda_mysql log_actividad > log_actividad.sqlLa opción --quick (activada por defecto con --opt) lee las filas una por una desde el servidor en lugar de cargarlas todas en memoria, lo que es esencial para tablas muy grandes.
Exportar una tabla con sus dependencias
Si la tabla tiene foreign keys que apuntan a otras tablas, el dump de la tabla individual no incluye las tablas referenciadas. Al restaurar, puedes encontrar errores si las tablas referenciadas no existen.
Una solución es desactivar temporalmente la verificación de foreign keys durante la restauración. mysqldump incluye automáticamente estas sentencias cuando usas --opt (activado por defecto):
-- Estas líneas aparecen en el archivo de dump
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-- ... sentencias CREATE TABLE e INSERT ...
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;La otra opción es exportar la tabla junto con todas sus dependencias:
# Exportar productos con su tabla de categorías referenciada
mysqldump --single-transaction -u root -p tienda_mysql categorias productos > productos_con_categorias.sqlExportar una tabla a otro servidor
Puedes combinar mysqldump con mysql en un pipe para transferir una tabla directamente entre servidores sin crear un archivo intermedio:
# Transferir tabla directamente entre servidores
mysqldump --single-transaction -u root -p tienda_mysql productos \
| mysql -h servidor_destino -u admin -p tienda_mysqlSi los servidores están en redes diferentes, puedes usar SSH como túnel:
# Transferir a través de SSH
mysqldump --single-transaction -u root -p tienda_mysql productos \
| ssh usuario@servidor_destino "mysql -u admin -p tienda_mysql"Dump con formato de sentencias INSERT completas
Por defecto, mysqldump genera sentencias INSERT extendidas que agrupan varias filas. Si necesitas sentencias individuales (una por fila), usa --skip-extended-insert:
mysqldump --skip-extended-insert -u root -p tienda_mysql productos > productos_filas_individuales.sql-- Con --skip-extended-insert: una sentencia por fila
INSERT INTO `productos` VALUES (1,'iPhone 15 Pro',1299.99,45,6);
INSERT INTO `productos` VALUES (2,'Samsung Galaxy S24',899.99,62,6);
INSERT INTO `productos` VALUES (3,'Google Pixel 8',699.00,38,6);Esto genera un archivo más grande y la restauración es más lenta, pero el archivo es más legible y más fácil de editar manualmente si necesitas modificar datos específicos.
Incluir nombres de columna en los INSERT
La opción --complete-insert genera sentencias INSERT que incluyen los nombres de las columnas:
mysqldump --complete-insert -u root -p tienda_mysql productos > productos_completo.sqlINSERT INTO `productos` (`id`,`nombre`,`precio`,`stock`,`categoria_id`)
VALUES (1,'iPhone 15 Pro',1299.99,45,6);Esto es especialmente útil si la tabla destino tiene las columnas en un orden diferente o si se han añadido nuevas columnas desde que se creó el dump.
Restaurar una tabla desde el dump
La restauración de una tabla individual se hace con el cliente mysql:
# Restaurar en la misma base de datos
mysql -u root -p tienda_mysql < productos_backup.sql
# Restaurar desde archivo comprimido
zcat productos.sql.gz | mysql -u root -p tienda_mysqlSi la tabla ya existe, la sentencia DROP TABLE IF EXISTS incluida en el dump la eliminará antes de recrearla. Ten cuidado: esto destruye todos los datos actuales de la tabla.
El dump de tablas individuales es una herramienta precisa para cuando necesitas trabajar con partes específicas de tu base de datos. En el siguiente artículo veremos cómo restaurar backups completos, incluyendo técnicas para manejar errores y monitorear el progreso.
Escrito por Eduardo Lázaro
