2011-06-14 38 views
6

Tenemos una base de datos PostgreSQL que está respaldada por noche desde una tarea programada con un comando siguiente:¿Cómo verificar si la copia de seguridad postgresql fue exitosa?

su postgres -c "pg_dump our_database | gzip > /home/smb/shared/database_backup.bak.gz" 

Recientemente hemos tenido un fallo de disco que comenzó con unos pocos sectores defectuosos y durante ese tiempo pg_dump salido con la siguiente errores

pg_dump: SQL command failed 
pg_dump: Error message from server: ERROR: catalog is missing 17 attribute(s) from relid 20158 
pd_dump: The command was: LOCK TABLE public.obvez IN ACCESS SHARE MODE 

Ahora, ya que estaba en trabajo de cron, nadie se dio cuenta mensajes de error, la copia de seguridad se interrumpe pero no cero era de tamaño, todo parecía estar bien y el error pasó desapercibido hasta el fallo del disco final, cuando nos dimos cuenta de que no tenía respaldo

Nos las arreglamos para restaurar los datos de una copia de seguridad anterior, pero ahora me gustaría saber cuál sería la forma correcta de comprobar si pg_dump terminó su trabajo con éxito o no?

+0

usted debe preguntar esto en http:

su postgres "pg_dump our_database 2>> $LOG_FILE | gzip > /home/smb/shared/database_backup.bak.gz" cat $LOG_FILE | mailx $MAINTAINERS -s "Postgresql backup" 

ADENDA// DBA.stackexchange.com en su lugar. StackOverflow es para programar. – Jonas

+0

@Jonas Esto debería permanecer aquí. OP está pidiendo una forma de verificar si hay errores. Sucede que está tratando de automatizar una base de datos, pero esto podría aplicarse a casi cualquier cosa, así que no veo por qué razón debería ser movido a DBA. – alexandernst

Respuesta

8

Escribo el resultado en un archivo de registro, y al final del cronjob, envío el contenido del archivo de registro a mi dirección de correo electrónico. De esa forma, sabré cuando algo salió mal. Si desea enviar el correo electrónico sólo si algo salía mal, se puede comprobar el código de retorno de pg_dump::

LOG_FILE=/tmp/pgdump.err 

if ! pg_dump -U backupuser "our_database" 2> $LOG_FILE 
then 
    cat $LOG_FILE | mailx 'youremailaddress' -s "Postgresql backup failure!" 
fi 
+1

El problema es que esta base de datos se encuentra actualmente en el sitio del cliente, y estoy seguro de que sabrían cómo leer un archivo de registro. Supongo que puedo modificar esto y enviar un correo electrónico solo si algo salió mal. –

+1

@Dragan Matic: Ah, usted no dijo eso en su mensaje original. Expandí el ejemplo para enviar correo solo cuando pg_dump devolvió algo que no sea "0" (que es correcto). Además, debe considerar el uso de un "usuario de copia de seguridad" dedicado que pueda hacer una copia de seguridad, y use .pgpass en lugar de sudo. Bueno, al menos, no me gusta sudo si puedo evitarlo;) –

Cuestiones relacionadas