You are on page 1of 3

Ejecutamos backup.sh #!

/bin/bash #########

WB01po ################################

DIR_BACKUP=/opt/app/datos/postgres/backups DIR_BASE=/opt/app/datos/postgres/WEBCS name=backup-nodo1-$(date +%Y%m%d) echo $name cd $DIR_BASE # Le decimos a Postgres que vamos a empezar un backup psql -d WEBCS -c "SELECT pg_start_backup('$name');" # Hacemos el tar excluyendo el directorio de pg_xlog tar -cvf $name.tar $(ls | grep -v pg_xlog) # Fin del backup psql -d WEBCS -c "SELECT pg_stop_backup();" if [ $? -eq 0 ]; then # Movemos el backup a los directorios correspondientes de wb01po y wb02po mv $name.tar $DIR_BACKUP/propio cd $DIR_BACKUP/propio scp $name.tar postgres@wb02po:$DIR_BACKUP/nodo1 echo Todo ha salido bien fi ######### Ejecutamos el /export/home/postgres/bin/backup.sh # a las 09:10 # ak aba a las ############################## movido a basura el comprimido WEBCS.zip Copiamos el contenido de wb01po:/export/home/postgres/bin/conf/ a wb02po Ejecutamos sincroniza.sh Vamos al otro nodo y ejecutamos recupera.sh recupera.sh nodo1 > recupera.log 2>&1 & #!/bin/bash #################### recupera.sh wb02po ############################ ######## if [ $# != 1 ]; then echo "Uso: $0 [propio | nodo1]"; exit -1; fi DIR_BASE=/opt/app/datos/postgres/WEBCS DIR_RECUPERACION=/opt/app/datos/postgres/backups/ # Variable que indica la cantidad de veces que hacemos la query de prueba. Hay 5 segundos entre intento e intento. #Paramos postgres shutdown.sh MAX_INTENTOS=20 if [ $1 == "propio" ]; then DIR_BAK=${DIR_RECUPERACION}propio/ echo $DIR_BAK elif [ $1 == "nodo1" ]; then DIR_BAK=${DIR_RECUPERACION}nodo1/ echo $DIR_BAK else echo -e "El parametro no es correcto \nDebe ser \"nodo1\" o \"propio\"";

exit -1; fi # Creo el directorio y donde va la base de datos y descomprimimos el backup mkdir $DIR_BASE cd $DIR_BASE tar -xvf ${DIR_BAK}$(ls -rt ${DIR_BAK} | tail -1) rm postmaster.pid # Creo un archivo llamado recovery.conf que lleva el comando para copiar los WAL echo "restore_command = 'cp /var/logs/app/postgres/WAL/%f %p'" > recovery.conf # Creo los directorios pg_xlog/archive_command mkdir -p pg_xlog/archive_status # Le doy permiso de lectura, escritura y ejecucion al usuario postgres solamente cd .. find WEBCS -type d | xargs chmod 700 # Cambio el fichero pg_hba.conf para que solo se permita el acceso a la base de datos al usuario local postgres mientras se esta recuperando cd $DIR_BASE cp /export/home/postgres/bin/conf/pg_hba.conf.noacceso pg_hba.conf # Levanto la BBDD nohup /opt/app/postgres/bin/postmaster -i -D $DIR_BASE </dev/null 2>&1 | nohup / usr/apache/bin/rotatelogs "/var/logs/app/postgres/server.%Y%m%d" 86400 & # Comprobamos que la BBDD esta levantada primera=1 estado=1 intentos=0 while [ $primera -eq 1 -o $estado -ne 0 ] do sleep 5 psql -d WEBCS -c "SELECT current_date;" estado=$? if [ $estado -eq 2 ]; then echo "La BBDD se esta recuperando" fi if [ $estado -eq 0 ]; then echo "La BBDD ya esta en funcionamiento" fi echo "Este es el estado de la operacion " $estado primera=0 if [ $intentos -ge $MAX_INTENTOS ]; then echo "La base de datos no se ha podido levantar o se esta tomando tiempo exces ivo"; echo -e "A partir de ahora:\n1. Consultar el log de Postgres para detectar si ha habido un error o si se esta levantando la BBDD.\n2. Una vez levantada la BBD D se debe cambiar el archivo pg_hba.conf por /export/home/postgres/bin/conf/pg_hba.conf.acceso" exit -1 fi echo "Intentos = " $intentos; intentos=$(expr $intentos + 1); done # Vuelvo a permitir el acceso para los usuarios locales y para el usuario tomcat

del nodo wb02po cp /export/home/postgres/bin/conf/pg_hba.conf.acceso pg_hba.conf pg_ctl -D $DIR_BASE reload echo -e "La BBDD esta levantada. \nFalta ejecutar la instruccion de autovacuum: ver /opt/app/postgres/bin/startup.sh"

You might also like