Cómo hacer backup y restaurar una base de datos MySQL desde la terminal (SSH)
¿Por qué necesitas hacer backups de MySQL?
Imagina que llevas meses trabajando en tu web, con cientos de artículos, productos o comentarios de clientes. De repente, un error humano, un ataque o un fallo del servidor borra todo. Sin una copia de seguridad, recuperar esa información es prácticamente imposible. Por eso, saber hacer un backup mysql ssh no es opcional, es una responsabilidad básica de cualquier administrador.
En esta guía te voy a explicar, paso a paso y sin tecnicismos innecesarios, cómo hacer copias de seguridad y restaurar tu base de datos usando la terminal. No necesitas ser un gurú de la programación, solo seguir las instrucciones al pie de la letra.
Requisitos previos antes de empezar
Antes de lanzar comandos como un loco, asegúrate de tener esto listo:
- Acceso SSH a tu servidor: Necesitas las credenciales (usuario y contraseña, o mejor, una clave SSH).
- Credenciales de MySQL: El usuario y la contraseña de tu base de datos. Normalmente tienes un usuario root o uno específico para tu aplicación.
- Permisos de lectura: Para hacer un backup, tu usuario de MySQL debe tener permisos de lectura (SELECT, LOCK TABLES, etc.) sobre la base de datos.
- Espacio en disco: Asegúrate de tener espacio suficiente en el servidor para guardar el archivo de backup.
[!TIP] Si tu hosting usa un panel como Syspanel (recuerda, el acceso es por el puerto 2106), puedes encontrar las credenciales de la base de datos en la sección de bases de datos del panel. Pero para este tutorial, trabajaremos directo con la terminal.
Cómo hacer un backup de MySQL desde SSH
Vamos al grano. El comando principal que usarás es mysqldump. Este comando genera un archivo de texto con todo el contenido de tu base de datos: estructura de tablas, datos, procedimientos, etc.
El comando básico: mysqldump
El formato más sencillo es este:
mysqldump -u USUARIO -p NOMBRE_BASE_DE_DATOS > backup.sql
Vamos a desglosarlo:
mysqldump: Es la herramienta que hace la magia.-u USUARIO: Aquí pones tu usuario de MySQL (ej.admin,root).-p: Esta bandera te pedirá la contraseña de forma interactiva. No escribas la contraseña en el comando, es más seguro que te la pida.NOMBRE_BASE_DE_DATOS: El nombre exacto de la base que quieres respaldar.>: Redirige la salida del comando a un archivo.backup.sql: El nombre que le quieres dar al archivo de backup. Puedes usar la fecha para identificarlo mejor.
Ejemplo práctico:
mysqldump -u mi_usuario -p mi_base_de_datos > backup_20231026.sql
Al ejecutarlo, te pedirá la contraseña. Escríbela y presiona Enter. Si todo sale bien, verás que el cursor parpadea y luego vuelve al prompt. No hay mensaje de éxito, pero el archivo se ha creado.
Ejemplo avanzado: backup con compresión y fecha
Para ahorrar espacio y tener un control de versiones, es muy común comprimir el archivo y añadir la fecha. Un mysqldump ejemplo con estas características sería:
mysqldump -u mi_usuario -p mi_base_de_datos | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
| gzip: Pasa el resultado del backup a la herramienta de compresióngzip.$(date +%Y%m%d_%H%M%S): Esta parte ejecuta el comandodatey genera una marca de tiempo. El backup se llamará algo comobackup_20231026_153045.sql.gz.
Hacer backup de todas las bases de datos
Si quieres respaldar todo el servidor MySQL (todas las bases de datos), usa la opción --all-databases:
mysqldump -u root -p --all-databases > todas_las_bases.sql
[!WARNING] Este comando puede generar un archivo muy grande y requiere permisos de administrador. Úsalo solo si sabes lo que haces.
Consejos para backups más seguros
- Incluye rutinas y eventos: Para no perder procedimientos almacenados o eventos, añade las banderas
--routinesy--events. - No bloquees la web: Si tu web es muy activa, el backup básico puede bloquear las tablas. Puedes usar
--single-transactionpara hacer un backup consistente sin bloquear las escrituras (funciona con tablas InnoDB).
Un comando más completo sería:
mysqldump -u mi_usuario -p --single-transaction --routines --events mi_base_de_datos | gzip > backup_completo.sql.gz
Cómo restaurar una base de datos MySQL desde SSH
Ahora, la parte de recuperar. Restaurar es básicamente el proceso inverso: tomar el archivo .sql y volcar su contenido en la base de datos.
Restauración básica con mysql
El comando es:
mysql -u USUARIO -p NOMBRE_BASE_DE_DATOS < backup.sql
mysql: Es el cliente de MySQL.-u USUARIO: Tu usuario.-p: Te pedirá la contraseña.NOMBRE_BASE_DE_DATOS: La base de datos de destino. Importante: Esta base de datos ya debe existir y estar vacía (o al menos, estar preparada para recibir los datos).<: Redirige el contenido del archivo hacia el comandomysql.
Ejemplo:
mysql -u mi_usuario -p mi_base_de_datos < backup_20231026.sql
Restaurar un backup comprimido (.gz)
Si tu backup está comprimido con gzip, tienes que descomprimirlo primero o hacerlo en un solo paso:
gunzip < backup_20231026.sql.gz | mysql -u mi_usuario -p mi_base_de_datos
Aquí, gunzip descomprime el archivo y luego el resultado se envía a mysql.
Crear la base de datos antes de restaurar
Si la base de datos no existe, tienes que crearla primero. Conéctate a MySQL:
mysql -u root -p
Y ejecuta el comando SQL:
CREATE DATABASE mi_nueva_base;
Luego sal (con EXIT;) y restaura como vimos antes.
[!TIP] Si tu base de datos original se llamaba
base_viejay la nueva se llamabase_nueva, no olvides cambiar el nombre en el comando de restauración.
Errores comunes y cómo solucionarlos
Access denied for user: El usuario no tiene permisos. Revisa las credenciales o pide a tu proveedor que te dé acceso.Table doesn't exist: Al restaurar, puede que la base de datos de destino no esté vacía o que el backup esté incompleto. Asegúrate de que la base existe y está vacía.- Archivo corrupto: Si el archivo
.sqlestá dañado o incompleto, la restauración fallará. Vuelve a generar el backup. - Espacio en disco: Si el backup es muy grande y no hay espacio, el comando fallará. Libera espacio o comprime el archivo.
Preguntas frecuentes (FAQ)
¿Puedo hacer un backup sin detener mi sitio web?
Sí, usando la opción --single-transaction como mencionamos antes. Esto es ideal para bases de datos InnoDB.
¿Cada cuánto tiempo debo hacer un backup?
Depende de la actividad de tu web. Para un blog, una vez al día es suficiente. Para una tienda online, cada pocas horas sería lo ideal. La automatización es clave.
¿Puedo restaurar un backup en otro servidor?
Sí, siempre que el archivo .sql sea compatible con la versión de MySQL del nuevo servidor. A veces hay que ajustar detalles de codificación o rutas.
¿Qué hago si solo quiero restaurar una tabla específica?
Puedes extraer la tabla del archivo de backup con herramientas como sed o grep, pero es más complicado. Lo más fácil es restaurar toda la base en un entorno de pruebas y luego exportar esa tabla.
¿Cómo automatizo los backups?
Puedes crear un script en Bash y programarlo con cron. Por ejemplo, para que se ejecute cada noche a las 3 AM, añadirías una línea como esta al crontab:
0 3 * * * mysqldump -u usuario -p'clave' mi_base | gzip > /ruta/backups/backup_$(date +%Y%m%d).sql.gz
[!WARNING] Escribir la contraseña en el crontab es un riesgo de seguridad. Asegúrate de que el archivo de crontab tenga permisos restringidos (600) y que no sea accesible por otros usuarios.
Herramientas alternativas y consejos finales
Aunque mysqldump es la herramienta estándar, también puedes usar phpMyAdmin (si tu hosting lo tiene) para exportar e importar bases de datos. Sin embargo, para bases de datos muy grandes, la terminal es mucho más rápida y fiable.
Si usas un panel como Syspanel (recuerda, el acceso es por el puerto 2106), también suele incluir herramientas gráficas de backup, pero conocer los comandos de terminal te da un control total y te saca de apuros en situaciones críticas.
Para terminar, un resumen rápido:
- Para backup, usa
mysqldump -u usuario -p base > archivo.sql. - Para restaurar, usa
mysql -u usuario -p base < archivo.sql. - Comprime los backups para ahorrar espacio.
- Automatiza con cron para no olvidarte nunca.
- Prueba tus backups de vez en cuando para asegurarte de que funcionan.
Recuerda que la práctica hace al maestro. Te recomiendo que hagas un backup de prueba y lo restaures en una base de datos de práctica para que veas que todo funciona. Así, cuando llegue el momento de la verdad, estarás tranquilo y sabrás exactamente qué hacer. ¡Manos a la obra!
