Automatizar los backups es como tener un cepillo de dientes automático, pero para tu base de datos. Hacer copias de seguridad regularmente salva el mundo (bueno, tus datos) de catástrofes. Nadie quiere recibir un mensaje a las 3 de la mañana diciendo que el servidor se cayó y darse cuenta de que el último backup fue hace dos semanas. La automatización resuelve este problema: nunca más arriesgues tus datos por culpa del factor humano.
Hay un montón de herramientas para automatizar, pero hoy vamos a hablar de las dos más populares:
cron— el planificador de tareas universal y de toda la vida en Linux.pg_cron— una extensión de PostgreSQL que te deja lanzar tareas directamente desde el propio servidor de base de datos.
La extensión pg_cron por debajo tira del servicio cron. ¡Este servicio solo está disponible en Linux!
¡Vamos allá!
Instalación de pg_cron
pg_cron es una extensión de PostgreSQL que te permite programar tareas automáticas directamente en la base de datos. Es bonito, cómodo y lleva tu PostgreSQL al nivel de un mini centro de operaciones.
Pasos para instalar:
- Asegúrate de estar usando PostgreSQL 10+, porque
pg_cronsolo funciona en versiones modernas. Instala la extensión usando el gestor de paquetes de tu sistema. Por ejemplo, en Ubuntu:
sudo apt install postgresql-<version>-cronSustituye
<version>por la versión de PostgreSQL que tengas instalada.Activa la extensión en la configuración de PostgreSQL. Abre el archivo
postgresql.confy añade:shared_preload_libraries = 'pg_cron'¿Por qué?
pg_cronnecesita que la librería se cargue al arrancar PostgreSQL — es obligatorio.Reinicia el servidor de PostgreSQL:
sudo systemctl restart postgresqlActiva la extensión en tu base de datos:
CREATE EXTENSION pg_cron;
¡En este punto pg_cron ya está listo para usarse!
Crear una tarea para hacer backups automáticos
La gracia de pg_cron es que puedes lanzar comandos a la hora que quieras. Vamos a crear una tarea para ejecutar pg_dump automáticamente.
Ejemplo:
SELECT cron.schedule(
'backup_nocturno', -- nombre de la tarea
'0 2 * * *', -- horario (cada noche a las 2)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- comando
);
Destripando la magia:
'backup_nocturno'— es el nombre personalizado de la tarea, así la puedes identificar fácil.'0 2 * * *'— horario en formato cron: todos los días a las 2:00.- El comando dentro de
$$ $$: ejecutamospg_dumppara crear una copia de seguridad de la baseuniversity.
¡Después de crear la tarea, se ejecutará según el horario!
Ver y borrar tareas de pg_cron
Para ver todas las tareas existentes:
SELECT * FROM cron.job;
Si alguna tarea ya no te sirve, bórrala así:
SELECT cron.unschedule(job_id);
Sustituye job_id por el identificador de la tarea que te salga en la consulta anterior.
Usar cron para automatizar
Si prefieres el método clásico de Linux para automatizar o pg_cron no está disponible por alguna razón, el todopoderoso cron te salva.
Configurar una tarea con cron
Primero asegúrate de que cron está instalado y funcionando:
sudo systemctl enable cron
sudo systemctl start cron
Ahora añade una tarea para crear el backup. Abre el editor para configurar tareas de cron:
crontab -e
Añade esta línea:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Esta línea mágica hace lo siguiente:
- A las 2 de la mañana cada día (
0 2 * * *) crea una copia de seguridad de la baseuniversity. - Todos los backups se guardan en el archivo
/backups/university_backup.dump.
Después de guardar el archivo crontab, la tarea programada empezará a ejecutarse.
Logs de ejecución de cron
A veces viene bien saber qué salió mal. Asegúrate de que la salida de los comandos se guarda en un archivo de log para poder revisarla. Para eso, añade un redireccionamiento de salida al comando:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
Ahora todo lo que pase durante la tarea se guardará en /var/log/backup.log.
Comparación entre pg_cron y cron
Así que tenemos dos herramientas potentes. ¿Cómo elegir la mejor?
pg_crones ideal si quieres programar y gestionar tareas directamente desde PostgreSQL. Es cómodo, no tienes que salir de la base de datos y puedes escalar tareas fácil.crones más universal. Puedes usarlo no solo para PostgreSQL, sino para automatizar cualquier cosa.
| Característica | pg_cron | cron |
|---|---|---|
| Facilidad de integración | Integrado en PostgreSQL, pero requiere extensión | Funciona para cualquier proceso |
| Instalación | Requiere instalar extensión | Viene en la mayoría de sistemas Linux |
| Logs | Se guardan en PostgreSQL (tabla cron.job_run_details) |
Se escriben en logs del sistema (normalmente /var/log/syslog) |
| Flexibilidad | Solo ejecuta SQL dentro de PostgreSQL | Puedes lanzar cualquier comando, script o binario |
Comprobar que las tareas funcionan
Para comprobar que el backup funciona, puedes lanzar el comando de cron manualmente:
pg_dump -U username -F c -f /backups/university_backup.dump university
También es útil revisar si los archivos de backup están en la carpeta indicada, su tamaño y la fecha de creación. Por ejemplo:
ls -lh /backups/
Revisa los logs regularmente y asegúrate de que las tareas se ejecutan bien.
Protección sencilla contra errores típicos
Error nº1: "¡Se me olvidaron los permisos!"
Si el usuario que ejecuta cron no tiene permisos para usar pg_dump, las tareas no van a funcionar. Asegúrate de que el usuario tiene acceso a la base de datos.
Error nº2: "¡El archivo fue a otro sitio!"
Siempre pon la ruta completa a los archivos y comandos. cron no sabe nada de tu entorno — la ruta completa es obligatoria: pg_dump -> /usr/bin/pg_dump.
Error nº3: "¿Dónde están mis logs?"
No te olvides de redirigir la salida del comando a un archivo de log. Sin eso, no tendrás ninguna info sobre los problemas.
¡A estas alturas ya estás listo para automatizar los backups de tu base de datos! Así, aunque el servidor se vaya de vacaciones de repente, tus datos estarán a salvo.
GO TO FULL VERSION