Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Copias de seguridad en PostgreSQL

Si tenemos una base de datos con información importante, es imprescindible hacer copias de seguridad.

Para ello, con postgres, podemos utilizar el siguiente script:

#!/bin/bash
#
# pg_copia.sh
# Por Guimi 2008/11 - http://www.guimi.net
# Basado en un script de http://www.cyberciti.biz/tips/howto-backup-postgresql-databases.html
#

##########################
# PARAMETROS
DIR="/var/lib/postgresql/copias"
LOG="pg_copia.log"

# Vamos al directorio de copias
cd $DIR

# Marcamos el inicio del script en el registro
echo "["`date +%C%y/%m/%d-%X`"] --- Iniciando pg_copia ---" >> $LOG

# Obtenemos la lista de BBDD, excluyendo template0 y template1
LISTA_BBDD=$(psql -l | awk '{ print $1}' | grep -vE '^-|^:|^List|^Name|^Nombre|^\(|template[0|1]')
# Para cada BBDD hacemos un volcado
for BBDD in $LISTA_BBDD
do
  FICHERO_COPIA="$BBDD.sql.gz"
  # Rotamos copias anteriores
  mv $FICHERO_COPIA".004" $FICHERO_COPIA".005" > /dev/null 2>&1
  mv $FICHERO_COPIA".003" $FICHERO_COPIA".004" > /dev/null 2>&1
  mv $FICHERO_COPIA".002" $FICHERO_COPIA".003" > /dev/null 2>&1
  mv $FICHERO_COPIA".001" $FICHERO_COPIA".002" > /dev/null 2>&1
  mv $FICHERO_COPIA $FICHERO_COPIA".001" > /dev/null 2>&1
  # Hacemos la copia
  pg_dump $BBDD | gzip -c > $FICHERO_COPIA
  # Marcamos en el registro la copia
  if [ "$?" -eq 0 ]
  then
    echo "[OK] $BBDD copiada" >> $LOG
  else
    echo "[ERROR $?] $BBDD NO copiada" >> $LOG
  fi
done

#Para restaurar una copia use:
# gunzip $FICHERO_COPIA
# psql -d $BBDD -f $FICHERO_COPIA > dump_$BBDD.log

 
Podemos programar el sistema para que realice copias automáticamente de forma regular mediante crontab -e.

Para restaurar una copia usamos:
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql.gz > dump_miBD.log

De esta manera también podemos “llevarnos” una BDD de un servidor a otro. Primero hacemos la copia de seguridad en el servidor ‘origen’, y después en el servidor ‘destino’ creamos la BD y restauramos la copia:
$ createdb -O mi_usuario miBD
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql > dump_miBD.log

postgres, copia de seguridad, backup postgres
Category: BBDD, seguridad