Todos sabemos lo importante que son las copias de seguridad y sobre todo que se hagan bien. Quiera un script que me permitiera olvidarme de las copias pasara lo que pasara en el servidor de PostgreSQL, que me copiara todas la bases de datos automaticamente, pero independientemente cada una, porque no solo es importante tener copias de seguridad sino tener controlada y facilitar la tarea de restaurar que se deberia de entrenar hasta dominarse a la perfeccion, es bueno no dudar ante momentos de presión y nunca dejarse llevar por lo nervios o la presión y hacer las cosas previo plan y analisis, para no cometer error y de paso ahorrar tiempo. Tener duplicadas la copias en 2 ubicaciones diferentes y tener un numero suficiente porque en caso de que la ley de murphy se ponga en marcha, nosotros la machaquemos de con un sonreir, de tengo la cosas bien hechas. Bueno este script le falta mejorar el log y que mande emails y la forma de borrar remotamente las copias que es un desperdicio de ancho de banda, pero bueno funciona… pero bueno eso sera en un futuro… Ahi va:
#!/bin/bash #============================================================================================= # Script Backup Databases PostgreSQL - Tomeu Roig # ============================================================================================= # Procedimiento de Copia de Seguridad de Servidor de Postgres ## BEGIN CONFIG ## BACKUP_DIR="/var/backups/db/" USER=usuario postgres FECHA=$(date +%d-%m-%Y) FECHA_BORRADO=$(date +%d-%m-%Y --date='10 days ago') ## END CONFIG ## if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR 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 -Z 5 -D -f $BACKUP_DIR$DB-$FECHA.gz $DB#Borramos las copias con una antiguedad mayor a 10 dias rm $BACKUP_DIR$DB-$FECHA_BORRADO.gz echo "finalizada $DB ..." done# Las empaquetamos y las copiamos en otro servidor de respaldo. # Una vez realizado borramos el empaquetado. cd /var/backups/db echo "...empaquetamos las DBs del $FECHA..." tar czvf dbs-$FECHA.tar.gz *-$FECHA.gz echo "... enviamos una copia a un sitio distinto...y borramos el fichero local empaquetado" ncftpput -DD -u usercopias -p password 192.168.0.xx /Backups/DBPostgres/ dbs-$FECHA.tar.gz echo "... borramos la antigua copia de mas de 10 dias del ftp..."ncftpget -C -DD -u usercopias -p password 192.168.0.xx /Backups/DBPostgres/dbs-$FECHA_BORRADO.tar.gz borrar echo "...borramos la copia local. FIN" rm borrar

