Script backup pgsql : Différence entre versions

De DiouxX's Wiki
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
{{ Introduction | Ce script permet de réaliser un backup d'une base de donnée PostgreSQL et de l'envoyer en scp vers un serveur distant }}
+
{{ Introduction | Ce script permet de réaliser un backup d'une base de données PostgreSQL et de l'envoyer sur un serveur distant }}
<syntaxhighlight lang=bash>
+
<syntaxhighlight lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 
#Script générique pour réaliser un backup d'une base de donnee PostgreSQL
 
#Script générique pour réaliser un backup d'une base de donnee PostgreSQL
Ligne 10 : Ligne 10 :
 
#Historique modification
 
#Historique modification
 
#11/03/2013 : Modification ordre date ( jour-mois-annee -> annee-mois-jour )
 
#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
 
#Couleur affichage
Ligne 27 : Ligne 28 :
 
PORT=0000
 
PORT=0000
 
DATABASE=""
 
DATABASE=""
 +
NAME=""
 
DESTINATION=""
 
DESTINATION=""
 
DIRECTORY_POSTGRES=/opt/postgresql-9.2.2/bin
 
DIRECTORY_POSTGRES=/opt/postgresql-9.2.2/bin
Ligne 62 : Ligne 64 :
 
   
 
   
 
   
 
   
while getopts u:vp:h:d:t: option
+
while getopts u:vp:h:d:n:t: option
 
do
 
do
 
  case $option in
 
  case $option in
Ligne 76 : Ligne 78 :
 
   d)
 
   d)
 
   DATABASE=$OPTARG
 
   DATABASE=$OPTARG
 +
  ;;
 +
  n)
 +
  NAME=$OPTARG
 
   ;;
 
   ;;
 
   t)
 
   t)
Ligne 90 : Ligne 95 :
 
     echo "-p\tPort d'ecoute de la database (default: 5432)"
 
     echo "-p\tPort d'ecoute de la database (default: 5432)"
 
     echo "-d\tNom de la database"
 
     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 "-t\tChemin de sauvegarde de l hote distant"
 
     echo "-v\tMode verbeux"
 
     echo "-v\tMode verbeux"
 
     echo "\nExemple uitlisation"
 
     echo "\nExemple uitlisation"
     echo "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 "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 "\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"
 
     echo "[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant"
Ligne 110 : Ligne 116 :
 
#Assignation du fichier de backup et generation de la date
 
#Assignation du fichier de backup et generation de la date
 
DATE=`date +"%Y"-"%m"-"%d"`
 
DATE=`date +"%Y"-"%m"-"%d"`
NAME_FILE=${DATABASE}-${DATE}.bck
+
if [ "$NAME" = ""  ]
+
then
 +
NAME_FILE=${DATABASE}-${DATE}.bck
 +
else
 +
NAME_FILE=${NAME}-${DATE}.bck
 +
fi
 +
 
 
if [ $VERBOSE -eq 1 ]
 
if [ $VERBOSE -eq 1 ]
 
then
 
then
echo "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tDestination : $DESTINATION\nBinnaire pgsql\t : $DIRECTORY_POSTGRES"
+
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"
 
echo "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
 
fi
 
fi
Ligne 177 : Ligne 188 :
 
fi
 
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
[[Catégorie:Scripts Database]]
+
[[Catégorie : Scripts Database]]

Version du 13 mars 2014 à 13:47

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