Script backup mysql : 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 MySQL et de l'envoyer en scp vers un serveur distant }}
+
{{ Introduction | Ce script permet de réaliser un Dump d'une base de donnée locale ou distante et de transférer ce dump vers un serveur de backup distant }}
<syntaxhighlight lang=bash>
+
==Utilisation==
#! /bin/bash
+
<pre>
 +
Utilisation du script :
 +
Afficher l'aide
 +
-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: 3306)
 +
-d Nom de la database
 +
-n Nom du Backup (default: Nom de la database)
 +
-t Chemin de sauvegarde de l hote distant
 +
-v Mode verbeux
 +
 
 +
Exemple utilisation
 +
script_backup_mysql -u glpi_user -m glpi -h 192.168.1.185 -d glpinew -n glpi-backup -t root@192.168.1.7:/mnt/backup_server/backup_mysql/glpinew/
 +
 
 +
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>
 +
 
 +
== Code ==
 +
<syntaxhighlight lang="bash">
 +
#!/bin/bash
 
#Script générique pour réaliser un backup d'une base de donnee MySQL
 
#Script générique pour réaliser un backup d'une base de donnee MySQL
 
#Susceptible d'etre ajouter dans une tache cron
 
#Susceptible d'etre ajouter dans une tache cron
 
+
 
# Auteur : Devleeschauwer Denis
 
# Auteur : Devleeschauwer Denis
 
#Date : mars 2013
 
#Date : mars 2013
 
+
 
#Historique modification
 
#Historique modification
#TODO : Ajout d'une option log (optionel)
+
 
 
 
#Couleur affichage
 
#Couleur affichage
 
VERT="\\033[1;32m"  
 
VERT="\\033[1;32m"  
Ligne 21 : Ligne 42 :
 
JAUNE="\\033[1;33m"  
 
JAUNE="\\033[1;33m"  
 
CYAN="\\033[1;36m"
 
CYAN="\\033[1;36m"
 
+
 
#Variables globales
 
#Variables globales
 
USER=""
 
USER=""
Ligne 28 : Ligne 49 :
 
PORT=0000
 
PORT=0000
 
DATABASE=""
 
DATABASE=""
 +
NAME=""
 
DESTINATION=""
 
DESTINATION=""
 
VERBOSE=0
 
VERBOSE=0
LOG=0
+
 
 
 
function usage(){
 
function usage(){
 
   echo -e "Utilisation du script :"
 
   echo -e "Utilisation du script :"
Ligne 40 : Ligne 61 :
 
   echo -e "-p\tPort d'ecoute de la database (default: 3306)"
 
   echo -e "-p\tPort d'ecoute de la database (default: 3306)"
 
   echo -e "-d\tNom de la database"
 
   echo -e "-d\tNom de la database"
 +
  echo -e "-n\tNom du Backup (default: Nom de la database)"
 
   echo -e "-t\tChemin de sauvegarde de l hote distant"
 
   echo -e "-t\tChemin de sauvegarde de l hote distant"
 
   echo -e "-v\tMode verbeux"
 
   echo -e "-v\tMode verbeux"
  echo -e "-l\tActiver log"
+
   echo -e "\nExemple utilisation"
   echo -e "\nExemple uitlisation"
+
   echo -e "script_backup_mysql -u glpi_user -m glpi -h 192.168.1.185 -d glpinew -n glpi-backup -t root@192.168.1.7:/mnt/backup_server/backup_mysql/glpinew/"
   echo -e "script_backup_mysql -lvu glpi_user -m glpi -h 192.168.1.185 -d glpinew -t root@192.168.1.7:/mnt/backup_server/backup_mysql/glpinew/"
 
 
   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 "\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"
 
   echo -e "[user@ordi ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@serveur-distant"
 
   exit 0
 
   exit 0
 
+
 
}
 
}
 
+
 
function verbose(){
 
function verbose(){
 
if [ $VERBOSE -eq 1 ]
 
if [ $VERBOSE -eq 1 ]
Ligne 58 : Ligne 79 :
 
fi
 
fi
 
}
 
}
 
+
 
if [ $# -eq 0 ]
 
if [ $# -eq 0 ]
 
then
 
then
 
   usage
 
   usage
 
fi
 
fi
 
+
 
+
while getopts u:m:lvp:h:d:t: option
+
while getopts u:m:vp:h:d:n:t: option
 
do
 
do
 
  case $option in
 
  case $option in
Ligne 82 : Ligne 103 :
 
   d)
 
   d)
 
   DATABASE=$OPTARG
 
   DATABASE=$OPTARG
 +
  ;;
 +
  n)
 +
  NAME=$OPTARG
 
   ;;
 
   ;;
 
   t)
 
   t)
Ligne 89 : Ligne 113 :
 
   VERBOSE=1
 
   VERBOSE=1
 
     ;;
 
     ;;
  l)
 
  LOG=1
 
  ;;
 
 
   *)
 
   *)
 
     usage
 
     usage
Ligne 97 : Ligne 118 :
 
  esac
 
  esac
 
done
 
done
 
+
 
#Changement du numero de port
 
#Changement du numero de port
 
#Si pas precise alors port = 3306
 
#Si pas precise alors port = 3306
 
if [ $PORT -eq 0000 ]
 
if [ $PORT -eq 0000 ]
  then
+
then
 
       PORT=3306
 
       PORT=3306
  fi
+
fi
 
+
 
#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"`
+
if [ "$NAME" = ""  ]
NAME_FILE=${DATABASE}-${DATE}.bck
+
then
 
+
DATE=`date +"%Y"-"%m"-"%d"`
verbose "\nListing des parametres :\n\tUser : $USER\n\tMot de passe : $PWD\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tDestination : $DESTINATION"
+
NAME_FILE=${DATABASE}-${DATE}.bck
 
+
else
 +
DATE=`date +"%Y"-"%m"-"%d"`
 +
NAME_FILE=${NAME}-${DATE}.bck
 +
fi
 +
verbose "\nListing des parametres :\n\tUser : $USER\n\tMot de passe : $PWD\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom : $NAME_FILE\n\tDestination : $DESTINATION"
 +
 
verbose "\nRequete SQL : mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE"
 
verbose "\nRequete SQL : mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE"
 
+
 
#Dump de la database
 
#Dump de la database
 
mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE
 
mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE
 
+
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Ligne 122 : Ligne 148 :
 
verbose "Dump Database \t\t\t$VERT[OK]$NORMAL"
 
verbose "Dump Database \t\t\t$VERT[OK]$NORMAL"
 
fi
 
fi
 
+
 
#Copie du  dump vers le serveur renseigne en parametre
 
#Copie du  dump vers le serveur renseigne en parametre
 
verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
 
verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
 
+
scp /tmp/$NAME_FILE $DESTINATION > /dev/null 2>&1
if [ $VERBOSE -eq 1 ]
+
then
 
scp /tmp/$NAME_FILE $DESTINATION
 
else
 
scp /tmp/$NAME_FILE $DESTINATION > /dev/null 2>&1
 
fi
 
 
 
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Ligne 139 : Ligne 159 :
 
         verbose "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
 
         verbose "Transfert Dump \t\t\t$VERT[OK]$NORMAL"
 
fi
 
fi
 
+
 
#Suppresion du dump local
 
#Suppresion du dump local
 
rm -f /tmp/$NAME_FILE
 
rm -f /tmp/$NAME_FILE
 
+
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Ligne 150 : Ligne 170 :
 
fi
 
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
[[Catégorie:Scripts Database]]
+
 
 +
[[Catégorie:Database]]

Version du 13 mars 2014 à 13:46

Ce script permet de réaliser un Dump d'une base de donnée locale ou distante et de transférer ce dump vers un serveur de backup distant

Utilisation

Utilisation du script :
	Afficher l'aide
-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: 3306)
-d	Nom de la database
-n	Nom du Backup (default: Nom de la database)
-t	Chemin de sauvegarde de l hote distant
-v	Mode verbeux

Exemple utilisation
script_backup_mysql -u glpi_user -m glpi -h 192.168.1.185 -d glpinew -n glpi-backup -t root@192.168.1.7:/mnt/backup_server/backup_mysql/glpinew/

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

Code

#!/bin/bash
#Script générique pour réaliser un backup d'une base de donnee MySQL
#Susceptible d'etre ajouter dans une tache cron
 
# Auteur : Devleeschauwer Denis
#Date : mars 2013
 
#Historique modification
 
#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=""
NAME=""
DESTINATION=""
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: 3306)"
  echo -e "-d\tNom de la database"
  echo -e "-n\tNom du Backup (default: Nom de la database)"
  echo -e "-t\tChemin de sauvegarde de l hote distant"
  echo -e "-v\tMode verbeux"
  echo -e "\nExemple utilisation"
  echo -e "script_backup_mysql -u glpi_user -m glpi -h 192.168.1.185 -d glpinew -n glpi-backup -t root@192.168.1.7:/mnt/backup_server/backup_mysql/glpinew/"
  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:m:vp:h:d:n:t: option
do
 case $option in
  u)
    USER=$OPTARG
   ;;
  m)
   PWD=$OPTARG
   ;;
  h)
   HOST=$OPTARG
   ;;
  p)
   PORT=$OPTARG
   ;;
  d)
   DATABASE=$OPTARG
   ;;
  n)
   NAME=$OPTARG
   ;;
  t)
   DESTINATION=$OPTARG
   ;;
  v)
   VERBOSE=1
    ;;
  *)
    usage
    ;;
 esac
done
 
#Changement du numero de port
#Si pas precise alors port = 3306
if [ $PORT -eq 0000 ]
then
      PORT=3306
fi
 
#Assignation du fichier de backup et generation de la date
if [ "$NAME" = ""  ]
then
	DATE=`date +"%Y"-"%m"-"%d"`
	NAME_FILE=${DATABASE}-${DATE}.bck
else
	DATE=`date +"%Y"-"%m"-"%d"`
	NAME_FILE=${NAME}-${DATE}.bck
fi
verbose "\nListing des parametres :\n\tUser : $USER\n\tMot de passe : $PWD\n\tHote : $HOST\n\tPort : $PORT\n\tDatabase : $DATABASE\n\tNom : $NAME_FILE\n\tDestination : $DESTINATION"
 
verbose "\nRequete SQL : mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE"
 
#Dump de la database
mysqldump -h $HOST -P $PORT -u $USER -p$PWD $DATABASE > /tmp/$NAME_FILE
 
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
verbose "\nCommande Transfert : scp /tmp/$NAME_FILE $DESTINATION"
scp /tmp/$NAME_FILE $DESTINATION > /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
 
#Suppresion du dump local
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