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