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 a un servidor Linux mediante PuTTY.[/caption]
Una vez dentro del servidor podremos ejecutar directamente las operaciones de importación y exportación.
[caption id="attachment_372" align="aligncenter" width="665"]
Terminal Linux conectada al servidor desde la que ejecutaremos los comandos MySQL.[/caption]
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
https://www.youtube.com/watch?v=F92DNU6XwKYExportar 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: