Main menu

Cómo importar y exportar bases de datos MySQL por consola en Linux

Exportar e importar una base de datos MySQL desde la consola de Linux es una tarea habitual para crear copias de seguridad, migrar una aplicación entre servidores o restaurar una base de datos.

Las dos herramientas principales son:

  • mysqldump, para exportar la base de datos.
  • mysql, para importar el archivo SQL resultante.

En esta guía veremos los comandos más habituales y algunas opciones útiles para trabajar con servidores locales y remotos.

Requisitos previos

Antes de empezar necesitamos:

  • acceso al servidor Linux;
  • un usuario MySQL con los permisos necesarios;
  • conocer el nombre de la base de datos;
  • y disponer de acceso por terminal, localmente o mediante SSH.

Si el servidor es remoto, podemos conectarnos mediante un cliente SSH como PuTTY o directamente con el comando ssh desde un terminal compatible.

Conexión SSH mediante PuTTY a servidor Linux

Conexión SSH a un servidor Linux mediante PuTTY.

Una vez dentro del servidor podremos ejecutar directamente las operaciones de importación y exportación.

Consola Linux para importar y exportar MySQL

Terminal Linux conectada al servidor desde la que ejecutaremos los comandos MySQL.

Exportar una base de datos MySQL con mysqldump

Para exportar una base de datos completa a un archivo SQL:

mysqldump -u usuario -p nombre_base_datos > backup.sql

Por ejemplo:

mysqldump -u root -p tienda > tienda.sql
Después de ejecutar el comando, MySQL solicitará la contraseña del usuario.

El archivo tienda.sql contendrá las instrucciones SQL necesarias para reconstruir las tablas y sus datos.

mysqldump escribe el resultado en la salida estándar y utilizamos > para guardarlo en un archivo.

Importar una base de datos MySQL desde un archivo SQL

Para restaurar un dump sobre una base de datos existente:

mysql -u usuario -p nombre_base_datos < backup.sql

Por ejemplo:

mysql -u root -p tienda < tienda.sql

Si la base de datos todavía no existe, podemos crearla primero:

mysql -u root -p

Y dentro del cliente MySQL:

CREATE DATABASE tienda;

Después salimos:

exit;

Y realizamos la importación:

mysql -u root -p tienda < tienda.sql

También podemos entrar en MySQL y utilizar:

source /ruta/al/backup.sql;

Tutorial en vídeo: importar y exportar MySQL desde Linux

Exportar una base incluyendo CREATE DATABASE

Hay una diferencia importante entre:

mysqldump -u root -p tienda > tienda.sql

y:

mysqldump -u root -p --databases tienda > tienda.sql

Cuando utilizamos --databases, el archivo generado incluye instrucciones para crear y seleccionar la base de datos.

Esto permite posteriormente restaurarlo sin especificar una base de datos de destino:

mysql -u root -p < tienda.sql

Es especialmente práctico en migraciones.

Exportar varias bases de datos

Para exportar varias bases en un único archivo:

mysqldump -u root -p --databases base1 base2 base3 > backup.sql

Para restaurarlas:

mysql -u root -p < backup.sql

Exportar todas las bases de datos MySQL

Para crear un volcado de todas las bases accesibles para el usuario:

mysqldump -u root -p --all-databases > todas-las-bases.sql

La restauración se realiza con:

mysql -u root -p < todas-las-bases.sql

Los permisos del usuario determinarán qué bases e información pueden exportarse.

Exportar una base de datos comprimida con gzip

Para bases grandes podemos comprimir directamente la salida:

mysqldump -u root -p tienda | gzip > tienda.sql.gz

Para restaurarla sin generar previamente el archivo .sql:

gunzip < tienda.sql.gz | mysql -u root -p tienda

También podemos utilizar:

gzip -dc tienda.sql.gz | mysql -u root -p tienda

Esto resulta útil para ahorrar espacio y facilitar la transferencia de dumps de cierto tamaño.

Exportar o importar MySQL desde un servidor remoto

Si MySQL se encuentra en otro servidor, utilizamos -h para indicar el host:

mysqldump -h servidor.example.com -u usuario -p tienda > tienda.sql

Para importar:

mysql -h servidor.example.com -u usuario -p tienda < tienda.sql

Si el servidor utiliza un puerto diferente:

mysql -h servidor.example.com -P 3307 -u usuario -p tienda < tienda.sql

El servidor deberá aceptar conexiones desde el origen y el usuario tendrá que disponer de los permisos necesarios.

Incluir procedimientos, funciones y eventos

Si utilizamos procedimientos almacenados o funciones:

mysqldump -u root -p --routines tienda > tienda.sql

Para incluir también eventos:

mysqldump -u root -p --routines --events tienda > tienda.sql

Los triggers se incluyen normalmente con las tablas. Las rutinas y eventos requieren prestar atención a las opciones correspondientes.

Una exportación más completa podría ser:

mysqldump -u root -p --routines --events tienda > tienda.sql

Copias consistentes con tablas InnoDB

Para bases InnoDB en funcionamiento podemos utilizar:

mysqldump -u root -p --single-transaction tienda > tienda.sql

Esta opción resulta útil para obtener un volcado consistente de tablas transaccionales sin mantener el bloqueo tradicional de tablas durante toda la operación.

Por ejemplo:

mysqldump -u root -p \
  --single-transaction \
  --routines \
  --events \
  tienda > tienda.sql

No conviene añadir opciones automáticamente: debemos utilizar únicamente las que correspondan a nuestra base de datos.

Evita escribir la contraseña directamente en el comando

No recomiendo utilizar comandos como:

mysqldump -u usuario -pMiPassword tienda > tienda.sql

La contraseña puede quedar expuesta en el historial del shell o mediante otros mecanismos del sistema.

Es preferible:

mysqldump -u usuario -p tienda > tienda.sql

y escribir la contraseña cuando MySQL la solicite.

Para procesos automatizados existen mecanismos específicos de configuración y gestión de credenciales.

Errores habituales al importar o exportar MySQL

Access denied

Si aparece:

Access denied for user

comprueba usuario, contraseña, host desde el que puede conectarse y permisos sobre la base de datos.

Unknown database

Si aparece:

Unknown database

probablemente la base de destino no existe.

Créala previamente o genera el dump utilizando --databases.

El archivo SQL es muy grande

Trabajar desde consola evita muchas de las restricciones de subida habituales de las herramientas web.

Además, podemos utilizar gzip para reducir el espacio necesario para guardar o transferir el dump.

Exportar MySQL no sustituye a una estrategia de backup

mysqldump es una herramienta muy útil para realizar copias lógicas, migraciones y restauraciones.

Pero una estrategia de backup empresarial debe definir también:

  • frecuencia;
  • retención;
  • ubicación de las copias;
  • automatización;
  • monitorización;
  • cifrado cuando corresponda;
  • y pruebas periódicas de restauración.

Un backup que nunca se ha restaurado con éxito no garantiza por sí solo que podamos recuperar el servicio cuando lo necesitemos.

En ENDEOS gestionamos servidores, bases de datos, monitorización y continuidad dentro de nuestros servicios de Administración de Sistemas.

Comparte en redes sociales
factory_shortcodes_assets:
a:0:{}
classic-editor-remember:
classic-editor