Outils personnels

Dumpmysql.sh : Différence entre versions

De wikiGite

 
(10 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 2 : Ligne 2 :
 
  #!/bin/bash
 
  #!/bin/bash
 
  # FSo 2010
 
  # FSo 2010
  # V1.2
+
  # V1.3
 
  # The script and its config file must be placed in /opt/systools directory
 
  # The script and its config file must be placed in /opt/systools directory
 
  # or change line bellow
 
  # or change line bellow
. /opt/systools/dumpmysql.conf
 
 
   
 
   
 +
if [ -f $(dirname $0)/dumpmysql.conf ]
 +
then
 +
    . $(dirname $0)/dumpmysql.conf
 +
else
 +
    echo "$(dirname $0)/dumpmysql.conf introuvable !"
 +
    exit 1
 +
fi
 +
 +
ERROR=""
 
  if [ ! -d $BACKUP_DIR ]
 
  if [ ! -d $BACKUP_DIR ]
 
  then
 
  then
Ligne 12 : Ligne 20 :
 
  fi
 
  fi
 
  cd $BACKUP_DIR
 
  cd $BACKUP_DIR
 +
date > $LOG/dumpmysql.log
 +
IFS=$'\n'
 
  for DB in $BASE
 
  for DB in $BASE
 
  do
 
  do
     mysqldump $DB $DUMP_OPTS --password=$PASSWORD > ${HOST}_${DB}_${JOUR}.sql
+
    echo "dump $DB" >> $LOG/dumpmysql.log
    rm -f ${HOST}_${DB}_${JOUR}.sql.gz
+
     mysqldump "$DB" $DUMP_OPTS --password=$PASSWORD > my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log
    gzip ${HOST}_${DB}_${JOUR}.sql
+
    if [ $? -ne 0 ]
 +
    then
 +
      if [ "$ERROR" == "" ]
 +
      then
 +
          ERROR=$DB
 +
      else
 +
          ERROR=${ERROR},$DB
 +
      fi
 +
    else
 +
      rm -f my_${HOST}_"${DB}"_${JOUR}.sql.gz 2>> $LOG/dumpmysql.log
 +
      gzip my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log
 +
    fi
 
  done
 
  done
Puis créer un fichier de config dumpmysql.conf (ou le télécharger sur avec "wget http://www.systea.net/public/MaJ/dumpmysql.conf")
+
    if [ "$ERROR" != "" ]
 +
    then
 +
      (
 +
      echo "Subject: Mysqldump $(hostname) : $ERROR dump failed"
 +
      cat $LOG/dumpmysql.log
 +
      ) | /usr/sbin/sendmail $REPORT_EMAIL
 +
    fi
 +
date  >>/opt/systools/dumpmysql.log
 +
 
 +
Puis créer un fichier de config dumpmysql.conf
 
  # FSo 2010
 
  # FSo 2010
 
  # dumpmysql.sh config file
 
  # dumpmysql.sh config file
 
  # v1.1
 
  # v1.1
   
+
  REPORT_EMAIL=<mail de l'admin>
  HOST=<nom du host>
+
  HOST=$(hostname)
 
  PASSWORD=<mot de passe mysql>
 
  PASSWORD=<mot de passe mysql>
SCRIPT_DIR=/opt/systools
 
 
  BACKUP_DIR=/home/backup
 
  BACKUP_DIR=/home/backup
  LOG=$SCRIPT_DIR/dumpmysql.log
+
  LOG=dumpmysql.log
 
  JOUR=$(date +%w)
 
  JOUR=$(date +%w)
  # One or some bases separated by a space
+
  # One base
 
  #BASE=<une base>
 
  #BASE=<une base>
 +
# or some bases, separated by newline
 
  #BASE="plusieurs
 
  #BASE="plusieurs
 
  #bases
 
  #bases
Ligne 37 : Ligne 67 :
 
  #ligne"
 
  #ligne"
 
  # OR all databases except mysql
 
  # OR all databases except mysql
  BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql | grep -v information_schema)
+
  BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql | grep -v information_schema | grep -v performance_schema)
 
  # Some options required
 
  # Some options required
  #DUMP_OPTS="--routines"
+
  #DUMP_OPTS=""
  DUMP_OPTS=""
+
  DUMP_OPTS="--routines"
 +
 
 
Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4).
 
Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4).
  

Version actuelle datée du 5 juin 2012 à 17:46

Voir Mise_à_jour_automatique_des_scripts pour la création automatique du script /opt/systools/dumpmysql.sh :

#!/bin/bash
# FSo 2010
# V1.3
# The script and its config file must be placed in /opt/systools directory
# or change line bellow

if [ -f $(dirname $0)/dumpmysql.conf ]
then
   . $(dirname $0)/dumpmysql.conf
else
   echo "$(dirname $0)/dumpmysql.conf introuvable !"
   exit 1
fi

ERROR=""
if [ ! -d $BACKUP_DIR ]
then
    mkdir -p $BACKUP_DIR
fi
cd $BACKUP_DIR
date > $LOG/dumpmysql.log
IFS=$'\n'
for DB in $BASE
do
   echo "dump $DB" >> $LOG/dumpmysql.log
    mysqldump "$DB" $DUMP_OPTS --password=$PASSWORD > my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log
   if [ $? -ne 0 ]
   then
      if [ "$ERROR" == "" ]
      then
         ERROR=$DB
      else
         ERROR=${ERROR},$DB
      fi
   else
      rm -f my_${HOST}_"${DB}"_${JOUR}.sql.gz 2>> $LOG/dumpmysql.log
      gzip my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log
   fi
done
   if [ "$ERROR" != "" ]
   then
      (
      echo "Subject: Mysqldump $(hostname) : $ERROR dump failed"
      cat $LOG/dumpmysql.log
      ) | /usr/sbin/sendmail $REPORT_EMAIL
   fi
date  >>/opt/systools/dumpmysql.log

Puis créer un fichier de config dumpmysql.conf

# FSo 2010
# dumpmysql.sh config file
# v1.1
REPORT_EMAIL=<mail de l'admin>
HOST=$(hostname)
PASSWORD=<mot de passe mysql>
BACKUP_DIR=/home/backup
LOG=dumpmysql.log
JOUR=$(date +%w)
# One base
#BASE=<une base>
# or some bases, separated by newline
#BASE="plusieurs
#bases
#une
#par
#ligne"
# OR all databases except mysql
BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql | grep -v information_schema | grep -v performance_schema)
# Some options required
#DUMP_OPTS=""
DUMP_OPTS="--routines"

Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4).

Ne pas oublier un minimum de protection

chmod 600 dumpmysql.conf

Si ça n'a pas déjà été fait (par maj_script.sh par exemple), planifier la sauvegarde par un lien dans /etc/cron.daily

ln -s /opt/systools/dumpmysql.sh /etc/cron.daily/dumpmysql

et la lancer une première fois manuellement

/etc/cron.daily/dumpmysql
ls -l /home/backup