Script backup pgsql
Révision datée du 13 mars 2014 à 13:47 par Ddevleeschauwer (discussion | contributions)
Ce script permet de réaliser un backup d'une base de données PostgreSQL et de l'envoyer sur un serveur distant
#!/bin/sh
#Script générique pour réaliser un backup d'une base de donnee PostgreSQL
#Susceptible d'etre ajouter dans une tache cron
# Auteur : Devleeschauwer Denis
#Date : mars 2013
#Historique modification
#11/03/2013 : Modification ordre date ( jour-mois-annee -> annee-mois-jour )
#13/03/2014 : Ajout de l'option pour le choix du nom de backup
#Couleur affichage
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
#Variables globales
USER=""
HOST=""
PORT=0000
DATABASE=""
NAME=""
DESTINATION=""
DIRECTORY_POSTGRES=/opt/postgresql-9.2.2/bin
VERBOSE=0
#function usage() {
# echo -e "Utilisation du script :"
# echo -e "\tAfficher l'aide"
# echo -e "-u\tNom de l'utilisateur de la database"
# echo -e "-h\tHote contenant la database a backuper"
# echo -e "-p\tPort d'ecoute de la database (default: 5432)"
# echo -e "-d\tNom de la database"
# echo -e "-t\tChemin de sauvegarde de l hote distant"
# echo -e "-v\tMode verbeux"
# echo -e "\nExemple uitlisation"
# echo -e "script_backup_pgsql -u postgres -h 192.168.1.176 -d sogodb -t root@192.168.1.7:/mnt/backup_server/backup_postgresql/debPgsql/Sogo"
# echo -e "\nIMPORTANT\nPensez à copier la clef public sur le serveur que vous desirer envoyer le backup ( Pour automatiser la tache de backup)"
# echo -e "[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant"
# exit 0
#}
#function verbose() {
# if [ $VERBOSE -eq 1 ]
# then
# #Affichage de debug
# echo -e "$1"
# fi
#}
if [ $# -eq 0 ]
then
usage
fi
while getopts u:vp:h:d:n:t: option
do
case $option in
u)
USER=$OPTARG
;;
h)
HOST=$OPTARG
;;
p)
PORT=$OPTARG
;;
d)
DATABASE=$OPTARG
;;
n)
NAME=$OPTARG
;;
t)
DESTINATION=$OPTARG
;;
v)
VERBOSE=1
;;
*)
echo "Utilisation du script :"
echo "\tAfficher l'aide"
echo "-u\tNom de l'utilisateur de la database"
echo "-h\tHote contenant la database a backuper"
echo "-p\tPort d'ecoute de la database (default: 5432)"
echo "-d\tNom de la database"
echo "-n\tNom du Backup (default: Nom de la database)"
echo "-t\tChemin de sauvegarde de l hote distant"
echo "-v\tMode verbeux"
echo "\nExemple uitlisation"
echo "script_backup_pgsql -u postgres -h 192.168.1.176 -d sogodb -n sogo-name-backup -t root@192.168.1.7:/mnt/backup_server/backup_postgresql/debPgsql/Sogo"
echo "\nIMPORTANT\nPensez à copier la clef public sur le serveur que vous desirer envoyer le backup ( Pour automatiser la tache de backup)"
echo "[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant"
exit 0
;;
esac
done
#Changement du numero de port
#Si pas precise alors port = 5432
if [ $PORT -eq 0000 ]
then
PORT=5432
fi
#Assignation du fichier de backup et generation de la date
DATE=`date +"%Y"-"%m"-"%d"`
if [ "$NAME" = "" ]
then
NAME_FILE=${DATABASE}-${DATE}.bck
else
NAME_FILE=${NAME}-${DATE}.bck
fi
if [ $VERBOSE -eq 1 ]
then
echo "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : $DESTINATION\nBinnaire pgsql\t : $DIRECTORY_POSTGRES"
echo "\nRequete SQL : pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
fi
#Dump de la database
#NOTE : Il faut se rendre dans le dossier bin de Postgresql pour pouvoir executer la commande pg_dump
cd $DIRECTORY_POSTGRES
./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
if [ $? != 0 ]
then
if [ $VERBOSE -eq 1 ]
then
echo "Dump Database \t\t\t$ROUGE[KO]$NORMAL"
exit 2
fi
else
if [ $VERBOSE -eq 1 ]
then
echo "Dump Database \t\t\t$VERT[OK]$NORMAL"
fi
fi
#Copie du dump vers le serveur renseigne en parametre
if [ $VERBOSE -eq 1 ]
then
echo "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
scp /tmp/$NAME_FILE $DESTINATION
else
scp /tmp/$NAME_FILE $DESTINATION > /dev/null 2>&1
fi
if [ $? != 0 ]
then
if [ $VERBOSE -eq 1 ]
then
echo "Transfert Dump \t\t\t$ROUGE[KO]$NORMAL"
exit 2
fi
else
if [ $VERBOSE -eq 1 ]
then
echo "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
fi
fi
#Suppresion du dump local
rm -f /tmp/$NAME_FILE
if [ $? != 0 ]
then
if [ $VERBOSE -eq 1 ]
then
echo "Suppression Dump local \t\t$ROUGE[KO]$NORMAL"
exit 2
fi
else
if [ $VERBOSE -eq 1 ]
then
echo "Suppression Dump local \t\t$VERT[OK]$NORMAL"
fi
fi