:::: MENU ::::
Posts tagged with: postgresql

BackUps automáticos para PostgreSQL

En este Post voy a explicar cómo hacer backups automáticos para PostgreSQL en Ubuntu y además cómo mandar la copia de la
base de datos a otra máquina diferente. Cliente – Servidor.

Así que empecemos.

Crear las autorizaciones oportunas entre Cliente y Servidor.

sudo apt-get install openssh-server (tanto en el servidor como en el cliente)

ssh-keygen -t dsa (en el servidor)

Ahora en la carpeta home/tuusuario/.ssh del servidor habrá un archivo llamado id_dsa.pub, lo abrimos y copiamos el contenido en
home/tuusuario/.ssh del cliente en un archivo llamado authorized_keys, si no está lo creamos. Así ya tenemos creado el enlace
para realizar una conexión segura entre cliente y servidor, además nos quitamos el tener que introducir la contraseña de
validación.

Creación del Script.

En el servidor, desarrollamos el script para realizar las copias de datos en PostgreSQL, por ejemplo en home/usuarioservidor/ creamos un fichero llamado backups.sh y le damos propiedades 755. El script es el siguiente:

#!/bin/bash
#=============================================================================================
# Script Backup Databases PostgreSQL - Tomeu Roig
# =============================================================================================


# Procedimiento de Copia de Seguridad de Servidor de Postgres

## BEGIN CONFIG ##
BACKUP_DIR="/var/backups/ejemplo/" #Dirección de ejemplo donde se guardaran los backups
USER= tuusuario
FECHA=$(date +%d-%m-%Y)
FECHA_BORRADO=$(date +%d-%m-%Y --date=''10 days ago'')
BACKUP_DIR_TODAY=$BACKUP_DIR$FECHA/
## END CONFIG ##
export PGPASSWORD= tupass

if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

echo $BACKUP_DIR_TODAY
if [ ! -d $BACKUP_DIR_TODAY ]; then
mkdir $BACKUP_DIR_TODAY
fi

#Leemos todas la bases de datos existente en Postgres, para despues realizar la copia una a una
POSTGRE_DBS=$(psql -U $USER -l | awk ''(NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /template[0-9]/) { print $1 }'');
#Realizamos la copia de seguridad de cada una de ellas y las guardamos en un directorio de backups
for DB in $POSTGRE_DBS ; do
echo "* Backuping PostgreSQL data from $DB@$HOST ..."
pg_dump -U $USER --format=c -f $BACKUP_DIR_TODAY$DB.backup $DB

#Borramos las copias con una antiguedad mayor a 10 dias
rm -rf $BACKUP_DIR$FECHA_BORRADO
echo "finalizada $DB ..."
done

# Las empaquetamos y las copiamos en otro servidor de respaldo.
# Una vez realizado borramos el empaquetado.
cd $BACKUP_DIR_TODAY
echo "...empaquetamos las DBs del $FECHA..."
tar czvf dbs-$FECHA.tar.gz *.backup

echo "... enviamos una copia a un sitio distinto por scp..."

scp /var/backups/ejemplo/$FECHA/dbs-$FECHA.tar.gz usuarioservidor@ipservidor:/home/usuarioservidor/Backups_OSP/dbs-$FECHA.tar.gz

Lanzar el script automáico (si se desea)

Para terminar, vamos a hacer que ese script se lance cada cierto tiempo en el servidor, para ello vamos a utilizar una herramienta para ubuntu llamada crontab:

sudo apt-get install cron

cd /etc/

sudo nano crontab

Y ponemos en ese archivo: 15 22 * * * usuarioservidor /home/usuarioservidor/backups.sh

Esto indica que se hará todos los días a las 22:15

Lanzar el script manual (si se desea)

cd /home/usuarioservidor/

sh backups.sh

Pues nada, ya está todo montado. A disfrutar de los backups.

Saludos.