Script backup pgsql : Différence entre versions
(Page créée avec « {{ 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 }} <syntaxhighlight lang=bash> #!... ») |
|||
| (4 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
| − | {{ Introduction | Ce script permet de réaliser un backup d'une base de | + | {{ 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> | + | = Utilisation = |
| − | #!/bin/ | + | <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"> | ||
| + | #!/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 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
#Couleur affichage | #Couleur affichage | ||
| Ligne 24 : | Ligne 58 : | ||
#Variables globales | #Variables globales | ||
USER="" | USER="" | ||
| + | PWD="" | ||
HOST="" | HOST="" | ||
PORT=0000 | PORT=0000 | ||
DATABASE="" | DATABASE="" | ||
| − | + | DIRECTORY_DUMP="" | |
| − | DIRECTORY_POSTGRES=/opt/postgresql-9. | + | NAME="" |
| + | TARGET="" | ||
| + | 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 "-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 ] | if [ $# -eq 0 ] | ||
| Ligne 62 : | Ligne 104 : | ||
| − | while getopts u:vp:h:d:t: option | + | while getopts u:vp:h:d:n:t:f: option |
do | do | ||
case $option in | case $option in | ||
| Ligne 76 : | Ligne 118 : | ||
d) | d) | ||
DATABASE=$OPTARG | DATABASE=$OPTARG | ||
| + | ;; | ||
| + | n) | ||
| + | NAME=$OPTARG | ||
| + | ;; | ||
| + | f) | ||
| + | DIRECTORY_DUMP=$OPTARG | ||
;; | ;; | ||
t) | t) | ||
| Ligne 84 : | Ligne 132 : | ||
;; | ;; | ||
*) | *) | ||
| − | + | usage | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
;; | ;; | ||
esac | esac | ||
| Ligne 110 : | 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"` | ||
| − | NAME_FILE=${DATABASE}-${DATE}. | + | if [ -z $NAME ] |
| − | + | then | |
| − | if [ $ | + | NAME_FILE=${DATABASE}-${DATE}.psql |
| + | else | ||
| + | NAME_FILE=${NAME}-${DATE}.psql | ||
| + | fi | ||
| + | |||
| + | #Affichage Parametre et Requetes selon les parametres envoye | ||
| + | if [ -z $TARGET ] | ||
then | 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 | fi | ||
| Ligne 121 : | 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 | ||
| − | + | if [ -z $TARGET ] | |
| − | |||
| − | if [ $ | ||
then | then | ||
| − | if [ $ | + | #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 | ||
| − | + | ./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 | fi | ||
else | else | ||
| − | + | ./pg_dump $DATABASE -h $HOST -p $PORT -U $USER > /tmp/$NAME_FILE | |
| − | |||
| − | |||
| − | |||
fi | fi | ||
| − | + | if [ $? != 0 ] | |
| − | if [ $ | ||
then | then | ||
| − | + | verbose "Dump Database \t\t\t$ROUGE[KO]$NORMAL" | |
| − | |||
else | else | ||
| − | + | verbose "Dump Database \t\t\t$VERT[OK]$NORMAL" | |
fi | fi | ||
| − | if [ $ | + | #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 | ||
| − | + | verbose "$VERT\nPas de copie distante$NORMAL" | |
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | if [ $ | + | verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION" |
| + | scp /tmp/$NAME_FILE $TARGET > /dev/null 2>&1 | ||
| + | |||
| + | if [ $? != 0 ] | ||
then | then | ||
| − | + | 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 | ||
| − | + | #Si pas de TARGET, on ne supprime pas le DUMP | |
| − | + | if [ -z $TARGET ] | |
| − | if [ $ | ||
then | then | ||
| − | + | verbose "$VERT\nPas de Suppression du DUMP local$NORMAL" | |
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | if [ $ | + | rm -f /tmp/$NAME_FILE |
| + | |||
| + | if [ $? != 0 ] | ||
then | then | ||
| − | + | 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]] | ||
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