MySQL: backup y restauración desde la línea de comandos
Requisitos
- Tener acceso a un terminal Unix/Linux
- Tener la contraseña del usuario root de MySQL, o la de otro usuario con acceso a la base de datos
Backup
Backup de una sola base de datos
Backup a un archivo de texto plano con los comandos SQL para recrear las tablas y sus datos:
mysqldump -u [usuario] -p [nombre_base_de_datos] > [archivo].sql
Backup comprimido con gzip:
mysqldump -u [usuario] -p [nombre_base_de_datos] | gzip > [archivo].sql.gz
Backup comprimido con bzip2:
mysqldump -u [usuario] -p [nombre_base_de_datos] | bzip2 > [archivo].sql.bz2
La mayoría de instalaciones de PHPMyAdmin pueden importar archivos .gz y .bz2 directamente, así que la salida comprimida suele ser la mejor opción.
Usar --single-transaction con tablas InnoDB
Si tu base de datos usa InnoDB (el motor por defecto desde MySQL 5.5), añade siempre --single-transaction:
mysqldump -u [usuario] -p --single-transaction [nombre_base_de_datos] > [archivo].sql
Sin esta opción, mysqldump bloquea las tablas durante el volcado, lo que impide escrituras y puede producir una instantánea inconsistente si hay transacciones en curso. --single-transaction emite un BEGIN antes de volcar, obteniendo una instantánea consistente sin bloqueos. No tiene efecto en tablas MyISAM.
Backup de más de una base de datos
mysqldump -u [usuario] -p --databases [bd_1] [bd_2] [bd_n] > [archivo].sql
Backup de todas las bases de datos
mysqldump -u [usuario] -p --all-databases > [archivo].sql
Vuelca todas las bases de datos en un solo archivo. Muy útil para migrar un servidor MySQL completo.
Incluir rutinas almacenadas y eventos
Por defecto mysqldump no exporta procedimientos almacenados, funciones ni eventos programados. Añade estas opciones para un backup completo:
mysqldump -u [usuario] -p --single-transaction --routines --events [nombre_base_de_datos] > [archivo].sql
Restauración
Primero crea la base de datos de destino:
mysql -u [usuario] -p
En el prompt mysql>:
CREATE DATABASE [nombre_base_de_datos];
Opcionalmente, crea un usuario dedicado (recomendado):
CREATE USER '[nuevo_usuario]'@'[hostname]' IDENTIFIED BY '[contraseña]';
GRANT ALL PRIVILEGES ON [nombre_base_de_datos].* TO '[nuevo_usuario]'@'[hostname]';
FLUSH PRIVILEGES;
EXIT;
Nota MySQL 5.x: la sintaxis antigua
GRANT ... IDENTIFIED BYfunciona en MySQL 5.x pero está obsoleta en MySQL 8 y eliminada en versiones posteriores. Usa el método en dos pasosCREATE USER+GRANTmostrado arriba en MySQL 8+.
Restaurar desde el archivo dump
mysql -u [nuevo_usuario] -p [nombre_base_de_datos] < [archivo].sql
Si el archivo está comprimido, descomprímelo primero:
gunzip [archivo].sql.gz
bunzip2 [archivo].sql.bz2
O envíalo directamente por pipe sin crear un archivo intermedio:
gunzip -c [archivo].sql.gz | mysql -u [nuevo_usuario] -p [nombre_base_de_datos]
MariaDB
En MariaDB 10.4+ el comando preferido es mariadb-dump (un reemplazo directo de mysqldump):
mariadb-dump -u [usuario] -p --single-transaction [nombre_base_de_datos] > [archivo].sql
mysqldump sigue funcionando como alias, pero mariadb-dump es el nombre canónico de ahora en adelante.
Última actualización: 25 de junio de 2026