Cómo hacer backup de una base de datos MySQL desde la terminal (mysqldump)
¿Por qué es importante hacer backups de MySQL?
Imagina que trabajas durante meses en el contenido de tu web, en los registros de tus clientes o en el catálogo de tu tienda online. Ahora piensa que un error humano, un ataque informático o un fallo del servidor borra todo en un segundo. Sin un backup mysql terminal, ese escenario se convierte en una pesadilla. Realizar copias de seguridad periódicas es como tener un seguro de vida para tu información: no lo necesitas hasta que lo necesitas, y cuando lo necesitas, te salva el día.
La herramienta más potente y utilizada para esto es mysqldump. Es un utilitario que viene incluido con MySQL y MariaDB, y que te permite generar un archivo de texto (normalmente con extensión .sql) que contiene todas las instrucciones necesarias para recrear tus bases de datos: tablas, datos, usuarios, permisos, etc. Lo mejor de todo es que no necesitas un panel de control gráfico; con acceso a la terminal del servidor, puedes ejecutar mysqldump comandos que te darán un control total y absoluto.
En esta guía, voy a explicarte paso a paso cómo hacer un respaldo base de datos mysql desde la terminal, desde lo más básico hasta técnicas avanzadas como la automatización. No necesitas ser un experto en sistemas; con seguir los pasos y entender los conceptos, tendrás tus copias de seguridad listas en minutos.
Requisitos previos antes de empezar
Antes de lanzarte a ejecutar comandos, asegúrate de tener lo siguiente:
- Acceso SSH a tu servidor: Necesitas poder conectarte por terminal. En Windows puedes usar PuTTY, y en Mac o Linux, la propia terminal.
- Credenciales de MySQL: Necesitas un usuario con permisos suficientes (normalmente
rooto un usuario con privilegios sobre las bases de datos que quieres respaldar). - Conocimiento del nombre de tus bases de datos: Si no lo recuerdas, puedes ejecutar
mysql -u usuario -p -e "SHOW DATABASES;"para listarlas.
[INFO] Si tu hosting utiliza un panel como Syspanel (accesible por el puerto 2106), también puedes generar backups desde su interfaz, pero hacerlo por terminal te da más flexibilidad y control, especialmente si necesitas automatizar el proceso o restaurar en un servidor distinto.
El comando básico: mysqldump backup
El comando más simple para hacer un backup mysql terminal de una base de datos específica es el siguiente:
mysqldump -u usuario -p nombre_base_datos > respaldo.sql
Vamos a desglosarlo para que lo entiendas perfectamente:
mysqldump: Es el programa que invocamos.-u usuario: Especifica el usuario de MySQL. Normalmenteroot, pero puede ser cualquier usuario con permisos.-p: Indica que pedirá contraseña. Al ejecutar el comando, te la pedirá de forma interactiva.nombre_base_datos: El nombre de la base que quieres respaldar.> respaldo.sql: Redirige la salida del comando a un archivo llamadorespaldo.sql. Puedes ponerle el nombre que quieras, pero es recomendable que sea descriptivo, comobackup_miweb_20250115.sql.
Este comando crea un archivo SQL con todo el contenido de esa base de datos. Si lo abres con un editor de texto, verás que contiene sentencias CREATE TABLE, INSERT INTO, etc. Esas sentencias son las que te permitirán reconstruir la base más adelante.
Hacer backup de varias bases de datos
Si necesitas respaldar más de una base a la vez, puedes usar el parámetro --databases:
mysqldump -u usuario -p --databases base1 base2 base3 > respaldo_multiple.sql
Este comando incluirá en el archivo las sentencias CREATE DATABASE correspondientes, lo que facilita la restauración en un servidor nuevo.
Hacer backup de todas las bases de datos
Para un respaldo base de datos mysql completo (todas las bases del servidor), usa la opción --all-databases:
mysqldump -u usuario -p --all-databases > backup_total.sql
Ten en cuenta que este archivo puede ser muy grande, especialmente si tienes muchas bases o mucha información. Además, incluye bases del sistema como mysql o performance_schema, así que úsalo con cuidado si solo te interesan tus bases de datos de usuario.
Parámetros clave de mysqldump que debes conocer
Los mysqldump comandos pueden personalizarse mucho más. Aquí tienes los parámetros más útiles para el día a día:
| Parámetro | Descripción |
|---|---|
--single-transaction | Muy recomendado. Hace una copia consistente sin bloquear las tablas (para InnoDB). Esencial si tu base está en uso. |
--routines | Incluye procedimientos almacenados y funciones. |
--triggers | Incluye los triggers de las tablas. |
--events | Incluye los eventos programados. |
--add-drop-table | Añade una sentencia DROP TABLE IF EXISTS antes de cada CREATE TABLE. Facilita la restauración sobre una base ya existente. |
--compress | Comprime los datos durante la transferencia si la haces a otro servidor. |
--result-file | En lugar de redirigir con >, usa este parámetro para especificar el archivo de salida. Útil en Windows para evitar problemas de codificación. |
Un ejemplo con varios de estos parámetros sería:
mysqldump -u usuario -p --single-transaction --routines --triggers --events --add-drop-table mi_base > backup_completo.sql
[TIP] Si tu web usa tablas InnoDB (lo más común), siempre usa
--single-transaction. Así evitas que los usuarios de tu web notifiquen errores mientras se realiza el backup, ya que no se bloquean las tablas durante el proceso.
Cómo comprimir el backup para ahorrar espacio
Los archivos SQL pueden ser muy pesados. Para ahorrar espacio en disco y facilitar la transferencia, puedes comprimirlos sobre la marcha usando gzip:
mysqldump -u usuario -p mi_base | gzip > backup_mi_base.sql.gz
Para restaurar un archivo comprimido, tendrás que descomprimirlo primero o usar gunzip en combinación con mysql:
gunzip < backup_mi_base.sql.gz | mysql -u usuario -p mi_base
Restaurar una base de datos desde un backup
De nada sirve hacer un backup mysql terminal si no sabes restaurarlo. El proceso es igual de sencillo, pero con mysql en lugar de mysqldump.
Para restaurar una base de datos desde un archivo .sql sin comprimir:
mysql -u usuario -p nombre_base_datos < backup_mi_base.sql
Si el archivo está comprimido con gzip:
gunzip < backup_mi_base.sql.gz | mysql -u usuario -p nombre_base_datos
[WARNING] Asegúrate de que la base de datos de destino exista. Si no existe, créala primero con
CREATE DATABASE nombre_base;desde el cliente MySQL, o bien usa los backups que incluyan la sentenciaCREATE DATABASE(los hechos con--databaseso--all-databases).
Automatización: backup mysql automatizado con cron
Hacer backups manuales está bien, pero lo ideal es que se hagan solos. Para ello, puedes programar un backup mysql automatizado mediante una tarea cron en tu servidor Linux.
Aquí tienes un ejemplo de script que puedes guardar como backup_db.sh:
#!/bin/bash
# Configuración
USUARIO="root"
CONTRASENA="tu_contraseña"
FECHA=$(date +%Y%m%d_%H%M%S)
DIRECTORIO="/ruta/a/tu/directorio/backups"
# Crear el directorio si no existe
mkdir -p $DIRECTORIO
# Hacer el backup de una base concreta
mysqldump -u $USUARIO -p$CONTRASENA --single-transaction mi_base | gzip > $DIRECTORIO/backup_mi_base_$FECHA.sql.gz
# Opcional: Borrar backups de más de 7 días para no llenar el disco
find $DIRECTORIO -name "backup_*.sql.gz" -mtime +7 -delete
echo "Backup completado: $DIRECTORIO/backup_mi_base_$FECHA.sql.gz"
Después de guardar el script, dale permisos de ejecución:
chmod +x backup_db.sh
Y añádelo al cron para que se ejecute, por ejemplo, a las 3 de la madrugada cada día:
crontab -e
Añade esta línea:
0 3 * * * /ruta/completa/al/script/backup_db.sh >> /var/log/backup_db.log 2>&1
[INFO] No pongas la contraseña en la línea de comandos de forma visible en el cron si te preocupa la seguridad. Puedes usar un archivo de configuración
~/.my.cnfcon permisos restringidos, o variables de entorno, para guardar las credenciales de forma más segura.
Solución de problemas comunes con mysqldump
A veces las cosas no salen a la primera. Aquí tienes algunos errores típicos y cómo solucionarlos:
-
Access denied for user 'root'@'localhost': El usuario no tiene permisos o la contraseña es incorrecta. Verifica las credenciales y los privilegios del usuario en MySQL. -
mysqldump: Got error: 1044: Access denied: El usuario no tiene permiso sobre esa base de datos en concreto. Necesitas permisosSELECT,LOCK TABLESySHOW VIEWal menos. -
El backup es enorme y tarda mucho: Usa
--single-transactiony considera excluir tablas grandes o temporales con--ignore-table=base.tabla. -
Errores de codificación o caracteres raros: Asegúrate de usar
--default-character-set=utf8mb4si tu base usa ese juego de caracteres. -
El archivo resultado está vacío: Revisa que el nombre de la base de datos sea correcto y que el usuario tenga acceso. Un error silencioso de permisos puede generar un archivo vacío.
Preguntas frecuentes (FAQ) sobre backups MySQL
¿Con qué frecuencia debo hacer un backup?
Depende de cuánto cambie tu información. Para una web estática, semanal puede bastar. Para una tienda online o un foro, lo ideal es un backup mysql automatizado diario o incluso cada pocas horas si tienes mucho movimiento.
¿Puedo hacer un backup de una base de datos que está siendo usada?
Sí, gracias a --single-transaction. Este parámetro usa una transacción para obtener una vista consistente de los datos sin bloquear las tablas, así que los usuarios no notarán ninguna interrupción.
¿Dónde debo guardar los backups?
Nunca en el mismo disco duro que el servidor de bases de datos. Lo ideal es guardarlos en un disco externo, en otro servidor o en un servicio de almacenamiento en la nube (como S3, Google Drive, etc.). Así te proteges ante fallos del disco principal.
¿Cómo sé que mi backup es correcto?
Puedes probar a restaurarlo en un entorno local o en una base de datos de pruebas. Una buena práctica es hacer una restauración de prueba al menos una vez al mes para asegurarte de que el archivo no está corrupto.
¿Qué pasa si uso Syspanel en lugar de la terminal?
Syspanel (accesible por el puerto 2106) tiene su propio sistema de backups que puede ser más visual. Sin embargo, la terminal te da más flexibilidad para automatizar procesos, programar tareas con cron y gestionar múltiples servidores. Si tu panel no te ofrece la opción de programar backups, la terminal es tu mejor aliada.
¿Puedo usar mysqldump en Windows?
Sí, si tienes MySQL instalado en Windows, puedes usar el mismo comando desde el símbolo del sistema o PowerShell, aunque la redirección con > y el uso de gzip pueden variar ligeramente. En ese caso, te recomiendo usar --result-file para evitar problemas de codificación.
Conclusión: tu tranquilidad en un archivo .sql
Aprender a usar mysqldump es una de las habilidades más valiosas que puedes tener como administrador de tu propio hosting. No solo te da independencia de los paneles de control, sino que te permite automatizar por completo la protección de tus datos. Con los comandos y ejemplos que te he mostrado, ya tienes el conocimiento para hacer desde un backup puntual hasta un sistema completo de copias programadas.
Recuerda: una copia de seguridad no es una opción, es una necesidad. No esperes a que sea demasiado tarde. Empieza hoy mismo con un mysqldump backup sencillo y ve perfeccionando tu estrategia con el tiempo. Tu yo del futuro (cuando tengas que restaurar algo) te lo agradecerá.
