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ées PostgreSQL et de l'envoyer sur 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 }}
 +
= Utilisation =
 +
<pre>
 +
Utilisation du script :
 +
 +
-u Nom de l'utilisateur de la database
 +
 +
-m Mot de passe de l'utilisateur de la database
 +
 +
-h Hote contenant la database a backuper
 +
 +
-p Port d'ecoute de la database (default: 5432)
 +
 +
-d Nom de la database
 +
 +
-n Nom du Backup (default: Nom de la database)
 +
 +
-f Dossier du backup si l'on ne désire pas un DUMP distant
 +
 +
-t Chemin de sauvegarde de l hote distant
 +
 +
-v Mode verbeux
 +
 +
Example
 +
 +
Si l'on veut un DUMP distant
 +
 +
script_backup_postgresql -u sogo_user -h localhost -d sogodb -n SOGo -t root@192.168.1.1:/mnt/backup_server/backup_postgresql/sogo/
 +
 +
Si l'on veut un DUMP local
 +
 +
script_backup_postgresql -u sogo_user -h localhost -d sogodb -n sogo-backup -f /opt/backup/sogo/"
 +
 +
IMPORTANT
 +
 +
Pensez à copier la clef public sur le serveur que vous desirer envoyer le backup ( Pour automatiser la tache de backup)
 +
 +
[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant
 +
</pre>
 +
 +
= Script =
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
#!/bin/sh
+
#!/bin/bash
 
#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
 
#Susceptible d'etre ajouter dans une tache cron
 
#Susceptible d'etre ajouter dans une tache cron
 
# Auteur : DiouxX
 
#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
 
#Couleur affichage
Ligne 25 : Ligne 58 :
 
#Variables globales
 
#Variables globales
 
USER=""
 
USER=""
 +
PWD=""
 
HOST=""
 
HOST=""
 
PORT=0000
 
PORT=0000
 
DATABASE=""
 
DATABASE=""
 +
DIRECTORY_DUMP=""
 
NAME=""
 
NAME=""
DESTINATION=""
+
TARGET=""
DIRECTORY_POSTGRES=/opt/postgresql-9.2.2/bin
+
DIRECTORY_POSTGRES=/opt/postgresql-9.4.0/bin
 
VERBOSE=0
 
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 usage() {
 +
  echo -e "Utilisation du script :"
 +
  echo -e "\tAfficher l'aide"
 +
  echo -e "-u\tNom de l'utilisateur de la database"
 +
  echo -e "-m\tMot de passe 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 "-n\tNom du Backup (default: Nom de la database)"
 +
  echo -e "-f\tDossier du backup si l'on ne désire pas un DUMP distant"
 +
  echo -e "-t\tChemin de sauvegarde de l hote distant"
 +
  echo -e "-v\tMode verbeux"
 +
  echo -e "\nExemple utilisation"
 +
  echo -e "\n#Si l'on veut un DUMP distant"
 +
  echo -e "script_backup_postgresql -u sogo_user -h localhost -d sogodb -n SOGo -t root@192.168.1.1:/mnt/backup_server/backup_postgresql/sogo/"
 +
  echo -e "\n#Si l'on veut un DUMP local"
 +
  echo -e "script_backup_postgresql -u sogo_user -h localhost -d sogodb -n sogo-backup -f /opt/backup/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() {
+
function verbose() {
# if [ $VERBOSE -eq 1 ]
+
if [ $VERBOSE -eq 1 ]
# then
+
then
#        #Affichage de debug
+
        #Affichage de debug
#        echo -e "$1"
+
        echo -e "$1"
# fi
+
fi
#}
+
}
 
   
 
   
 
if [ $# -eq 0 ]
 
if [ $# -eq 0 ]
Ligne 64 : Ligne 104 :
 
   
 
   
 
   
 
   
while getopts u:vp:h:d:n:t: option
+
while getopts u:vp:h:d:n:t:f: option
 
do
 
do
 
  case $option in
 
  case $option in
Ligne 81 : Ligne 121 :
 
   n)
 
   n)
 
   NAME=$OPTARG
 
   NAME=$OPTARG
 +
  ;;
 +
  f)
 +
    DIRECTORY_DUMP=$OPTARG
 
   ;;
 
   ;;
 
   t)
 
   t)
Ligne 89 : Ligne 132 :
 
     ;;
 
     ;;
 
   *)
 
   *)
     echo "Utilisation du script :"
+
     usage
    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
 
  esac
Ligne 116 : Ligne 146 :
 
#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"`
if [ "$NAME" = ""  ]
+
if [ -z $NAME ]
 
then
 
then
NAME_FILE=${DATABASE}-${DATE}.bck
+
NAME_FILE=${DATABASE}-${DATE}.psql
 
else
 
else
NAME_FILE=${NAME}-${DATE}.bck
+
NAME_FILE=${NAME}-${DATE}.psql
 
fi
 
fi
  
if [ $VERBOSE -eq 1 ]
+
#Affichage Parametre et Requetes selon les parametres envoye
 +
if [ -z $TARGET ]
 
then
 
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"
+
#Si pas de TARGET et pas de dossier de destination renseigne, dossier du DUMP = /tmp
echo "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
+
if [ -z $DIRECTORY_DUMP ]
 +
then
 +
verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : /tmp\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
 +
verbose "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
 +
else
 +
verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : $DIRECTORY_DUMP\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
 +
verbose "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > $DIRECTORY_DUMP$NAME_FILE"
 +
fi
 +
else
 +
verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : $TARGET\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
 +
verbose "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
 
fi
 
fi
 
   
 
   
Ligne 132 : Ligne 173 :
 
#NOTE : Il faut se rendre dans le dossier bin de Postgresql pour pouvoir executer la commande pg_dump
 
#NOTE : Il faut se rendre dans le dossier bin de Postgresql pour pouvoir executer la commande pg_dump
 
cd $DIRECTORY_POSTGRES
 
cd $DIRECTORY_POSTGRES
./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
+
if [ -z $TARGET ]
 
if [ $? != 0 ]
 
 
then
 
then
if [ $VERBOSE -eq 1 ]
+
#Si pas de TARGET et que l'on a pas de determiner le dossier de destination, le DUMP est dans /tmp
 +
if [ -z $DIRECTORY_DUMP ]
 
then
 
then
echo "Dump Database \t\t\t$ROUGE[KO]$NORMAL"
+
./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
exit 2
+
else
 +
./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > $DIRECTORY_DUMP$NAME_FILE
 
fi
 
fi
 
else
 
else
if [ $VERBOSE -eq 1 ]
+
./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
then
 
echo "Dump Database \t\t\t$VERT[OK]$NORMAL"
 
fi
 
 
fi
 
fi
 
   
 
   
#Copie du  dump vers le serveur renseigne en parametre
+
if [ $? != 0 ]
if [ $VERBOSE -eq 1 ]
 
 
then
 
then
echo "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
+
verbose "Dump Database \t\t\t$ROUGE[KO]$NORMAL"
        scp /tmp/$NAME_FILE $DESTINATION
 
 
else
 
else
        scp /tmp/$NAME_FILE $DESTINATION > /dev/null 2>&1
+
verbose "Dump Database \t\t\t$VERT[OK]$NORMAL"
 
fi
 
fi
 
   
 
   
if [ $? != 0 ]
+
#Copie du  dump vers le serveur renseigne en parametre
 +
#Si pas de TARGET, on ne lance pas la commande scp
 +
if [ -z $TARGET ]
 
then
 
then
if [ $VERBOSE -eq 1 ]
+
verbose "$VERT\nPas de copie distante$NORMAL"
then
 
        echo "Transfert Dump \t\t\t$ROUGE[KO]$NORMAL"
 
exit 2
 
fi
 
 
else
 
else
if [ $VERBOSE -eq 1 ]
+
verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
 +
        scp /tmp/$NAME_FILE $TARGET > /dev/null 2>&1
 +
 
 +
if [ $? != 0 ]
 
then
 
then
         echo "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
+
         verbose "Transfert Dump \t\t\t$ROUGE[KO]$NORMAL"
 +
else
 +
        verbose "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
 
fi
 
fi
 
fi
 
fi
 
   
 
   
 
#Suppresion du dump local
 
#Suppresion du dump local
rm -f /tmp/$NAME_FILE
+
#Si pas de TARGET, on ne supprime pas le DUMP
+
if [ -z $TARGET ]
if [ $? != 0 ]
 
 
then
 
then
if [ $VERBOSE -eq 1 ]
+
verbose "$VERT\nPas de Suppression du DUMP local$NORMAL"
then
 
        echo "Suppression Dump local \t\t$ROUGE[KO]$NORMAL"
 
exit 2
 
fi
 
 
else
 
else
if [ $VERBOSE -eq 1 ]
+
rm -f /tmp/$NAME_FILE
 +
 
 +
if [ $? != 0 ]
 
then
 
then
         echo "Suppression Dump local \t\t$VERT[OK]$NORMAL"
+
         verbose "Suppression Dump local \t\t$ROUGE[KO]$NORMAL"
 +
else
 +
        verbose "Suppression Dump local \t\t$VERT[OK]$NORMAL"
 
fi
 
fi
 
fi
 
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
 
[[Catégorie : Scripts Database]]
 
[[Catégorie : Scripts Database]]

Version actuelle datée du 28 octobre 2015 à 11:55

Ce script permet de réaliser un backup d'une base de données PostgreSQL et de l'envoyer sur un serveur distant

Utilisation

Utilisation du script :

-u Nom de l'utilisateur de la database

-m Mot de passe de l'utilisateur de la database

-h Hote contenant la database a backuper

-p Port d'ecoute de la database (default: 5432)

-d Nom de la database

-n Nom du Backup (default: Nom de la database)

-f Dossier du backup si l'on ne désire pas un DUMP distant

-t Chemin de sauvegarde de l hote distant

-v Mode verbeux

Example

Si l'on veut un DUMP distant

script_backup_postgresql -u sogo_user -h localhost -d sogodb -n SOGo -t root@192.168.1.1:/mnt/backup_server/backup_postgresql/sogo/

Si l'on veut un DUMP local

script_backup_postgresql -u sogo_user -h localhost -d sogodb -n sogo-backup -f /opt/backup/sogo/"

IMPORTANT

Pensez à copier la clef public sur le serveur que vous desirer envoyer le backup ( Pour automatiser la tache de backup)

[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant

Script

#!/bin/bash
#Script générique pour réaliser un backup d'une base de donnee PostgreSQL
#Susceptible d'etre ajouter dans une tache cron

#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=""
PWD=""
HOST=""
PORT=0000
DATABASE=""
DIRECTORY_DUMP=""
NAME=""
TARGET=""
DIRECTORY_POSTGRES=/opt/postgresql-9.4.0/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 "-m\tMot de passe 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 "-n\tNom du Backup (default: Nom de la database)"
  echo -e "-f\tDossier du backup si l'on ne désire pas un DUMP distant"
  echo -e "-t\tChemin de sauvegarde de l hote distant"
  echo -e "-v\tMode verbeux"
  echo -e "\nExemple utilisation"
  echo -e "\n#Si l'on veut un DUMP distant"
  echo -e "script_backup_postgresql -u sogo_user -h localhost -d sogodb -n SOGo -t root@192.168.1.1:/mnt/backup_server/backup_postgresql/sogo/"
  echo -e "\n#Si l'on veut un DUMP local"
  echo -e "script_backup_postgresql -u sogo_user -h localhost -d sogodb -n sogo-backup -f /opt/backup/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:f: option
do
 case $option in
  u)
    USER=$OPTARG
   ;;
  h)
   HOST=$OPTARG
   ;;
  p)
   PORT=$OPTARG
   ;;
  d)
   DATABASE=$OPTARG
   ;;
  n)
   NAME=$OPTARG
   ;;
  f)
    DIRECTORY_DUMP=$OPTARG
   ;;
  t)
   DESTINATION=$OPTARG
   ;;
  v)
   VERBOSE=1
    ;;
  *)
    usage
    ;;
 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 [ -z $NAME ]
then
	NAME_FILE=${DATABASE}-${DATE}.psql
else
	NAME_FILE=${NAME}-${DATE}.psql
fi

#Affichage Parametre et Requetes selon les parametres envoye 
if [ -z $TARGET ]
then
	#Si pas de TARGET et pas de dossier de destination renseigne, dossier du DUMP = /tmp
	if [ -z $DIRECTORY_DUMP ]
	then
		verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : /tmp\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
		verbose "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE"
	else
		verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : $DIRECTORY_DUMP\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
		verbose "\nRequete SQL : pg_dump $DATABASE  -h $HOST -p $PORT -U $USER > $DIRECTORY_DUMP$NAME_FILE"
	fi
else
	verbose "\nListing des parametres :\n\tUser : $USER\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom Backup : $NAME\n\tDestination : $TARGET\nBinaire pgsql\t : $DIRECTORY_POSTGRES"
	verbose "\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
if [ -z $TARGET ]
then
	#Si pas de TARGET et que l'on a pas de determiner le dossier de destination, le DUMP est dans /tmp
	if [ -z $DIRECTORY_DUMP ]
	then
		./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
	else
		./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > $DIRECTORY_DUMP$NAME_FILE
	fi
else
	./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE
fi
 
if [ $? != 0 ]
then
	verbose "Dump Database \t\t\t$ROUGE[KO]$NORMAL"
else
	verbose "Dump Database \t\t\t$VERT[OK]$NORMAL"
fi
 
#Copie du  dump vers le serveur renseigne en parametre
#Si pas de TARGET, on ne lance pas la commande scp
if [ -z $TARGET ]
then
	verbose "$VERT\nPas de copie distante$NORMAL"
else
	verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
        scp /tmp/$NAME_FILE $TARGET > /dev/null 2>&1

	if [ $? != 0 ]
	then
        	verbose "Transfert Dump \t\t\t$ROUGE[KO]$NORMAL"
	else
        	verbose "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
	fi
fi
 
#Suppresion du dump local
#Si pas de TARGET, on ne supprime pas le DUMP
if [ -z $TARGET ]
then
	verbose "$VERT\nPas de Suppression du DUMP local$NORMAL"
else
	rm -f /tmp/$NAME_FILE

	if [ $? != 0 ]
	then
        	verbose "Suppression Dump local \t\t$ROUGE[KO]$NORMAL"
	else
        	verbose "Suppression Dump local \t\t$VERT[OK]$NORMAL"
	fi
fi