Copia de seguridad y restauración de bases de datos PostgreSQL y MySQL
La copia de seguridad es uno de los procedimientos clave que garantiza la seguridad de los datos. Incluso con un alojamiento confiable, pueden ocurrir errores de aplicación, actualizaciones incorrectas o eliminación accidental de datos.
En esta guía, mostraremos cómo crear y restaurar copias de seguridad de bases de datos PostgreSQL y MySQL utilizando utilidades estándar de línea de comandos: pg_dump y mysqldump.
1. Copia de seguridad de PostgreSQL
1.1. Qué es pg_dump
pg_dump es una utilidad estándar de PostgreSQL para crear una copia de seguridad lógica de la base de datos. Guarda tanto la estructura (DDL) como los datos (DML) en un archivo de texto SQL que se puede usar más tarde para la restauración.
1.2. Sintaxis del comando
pg_dump -U <usuario> -h <host> -p <puerto> -d <base_de_datos> -F p -f <ruta_al_archivo.sql>
1.3. Ejemplo de copia de seguridad
pg_dump -U miusuario -h localhost -d mibase_de_datos -F p -f /backups/mibase_de_datos_$(date +%F).sql
Explicación de parámetros:
- -U miusuario — nombre de usuario de PostgreSQL;
- -h localhost — host del servidor (se puede especificar IP);
- -d mibase_de_datos — nombre de la base de datos;
- -F p — formato de salida (plain — SQL regular);
- -f — ruta al archivo donde se guardará la copia de seguridad;
- $(date +%F) — añade la fecha actual al nombre del archivo (por ejemplo, 2025-11-03).
1.4. Copia de seguridad comprimida
Para reducir el tamaño del archivo, puede usar la compresión gzip:
pg_dump -U miusuario mibase_de_datos | gzip > /backups/mibase_de_datos_$(date +%F).sql.gz
2. Restauración de la base de datos PostgreSQL
2.1. Usando psql
Para restaurar una base de datos desde una copia de seguridad de texto, use:
psql -U miusuario -d mibase_de_datos -f /backups/mibase_de_datos_2025-11-03.sql
Si la copia de seguridad está comprimida:
gunzip -c /backups/mibase_de_datos_2025-11-03.sql.gz | psql -U miusuario -d mibase_de_datos
2.2. Si la base de datos no existe
Primero cree una nueva base de datos:
createdb -U miusuario nuevabase_de_datos
psql -U miusuario -d nuevabase_de_datos -f /backups/mibase_de_datos_2025-11-03.sql
3. Copia de seguridad de MySQL
3.1. Qué es mysqldump
mysqldump es una utilidad estándar para crear volcados de MySQL. Guarda los comandos SQL necesarios para recrear tablas e insertar datos.
3.2. Sintaxis del comando
mysqldump -u <usuario> -p -h <host> <base_de_datos> > <ruta_al_archivo.sql>
3.3. Ejemplo de copia de seguridad
mysqldump -u miusuario -p mibase_de_datos > /backups/mibase_de_datos_$(date +%F).sql
Explicación de parámetros:
- -u miusuario — nombre de usuario de MySQL;
- -p — solicita una contraseña;
- mibase_de_datos — nombre de la base de datos;
- > — redirige la salida a un archivo.
3.4. Volcado comprimido
mysqldump -u miusuario -p mibase_de_datos | gzip > /backups/mibase_de_datos_$(date +%F).sql.gz
4. Restauración de la base de datos MySQL
4.1. Restauración desde archivo SQL
mysql -u miusuario -p mibase_de_datos < /backups/mibase_de_datos_2025-11-03.sql
4.2. Si la base de datos no existe
Cree una nueva base de datos antes de restaurar:
mysql -u miusuario -p -e "CREATE DATABASE nuevabase_de_datos;"
mysql -u miusuario -p nuevabase_de_datos < /backups/mibase_de_datos_2025-11-03.sql
4.3. Restauración desde volcado comprimido
gunzip -c /backups/mibase_de_datos_2025-11-03.sql.gz | mysql -u miusuario -p mibase_de_datos
5. Recomendaciones de Automatización y Seguridad
5.1. Copias de seguridad automatizadas con Cron
Para procesos de copia de seguridad regulares sin intervención manual, configure la automatización usando cron.
Configuración básica de cron:
# Abrir editor de cron crontab -e
Agregue una línea, por ejemplo:
0 2 * * * /usr/local/bin/db_backup.sh
Este comando ejecutará el script diariamente a las 2:00 AM.
Enfoque avanzado usando un script. Cree /usr/local/bin/db_backup.sh:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # Copia de seguridad de PostgreSQL pg_dump -U miusuario mibase_de_datos | gzip > $BACKUP_DIR/postgres_mibase_de_datos.sql.gz # Copia de seguridad de MySQL mysqldump -u miusuario -p mibase_de_datos | gzip > $BACKUP_DIR/mysql_mibase_de_datos.sql.gz # Eliminar copias de seguridad de más de 7 días find /backup/ -type f -mtime +7 -delete
Haga el script ejecutable:
chmod +x /usr/local/bin/db_backup.sh
Y agréguelo a cron:
0 2 * * * /usr/local/bin/db_backup.sh
5.2. Mejores prácticas de seguridad y almacenamiento
- Almacenamiento fuera del servidor: almacene copias de seguridad en almacenamiento en la nube (AWS S3, Google Cloud) o en unidades externas.
- Control de acceso: restrinja el acceso a la carpeta /backups, ya que los archivos pueden contener datos confidenciales.
chmod 700 /backup
chmod 600 /backup/*.sql.gz
- Verificación de integridad: realice restauraciones de prueba mensualmente para verificar la funcionalidad de la copia de seguridad.
- Confidencialidad: los archivos de copia de seguridad contienen contenidos de la base de datos — trátelos como información confidencial.
Conclusión
Usar pg_dump y mysqldump es una forma fácil, confiable y universal de hacer copias de seguridad de bases de datos PostgreSQL y MySQL. Estas herramientas son adecuadas tanto para copias de seguridad manuales como para procesos automatizados con un esfuerzo mínimo.
Las copias de seguridad regulares son la clave para la estabilidad y seguridad de los datos de su proyecto.