Outils pour utilisateurs

Outils du site


linux:scripts_bash:exemples:sqldump

Ceci est une ancienne révision du document !


sqldump

Pour faire un dump de chaque base, avec le jour en suffixe (et le mois si on est le 1er)

#!/bin/sh
# copie toutes les bases avec en suffixe le jour de la semaine, et compresse le sql
# le 1er du mois, ajoute un backup avec en suffixe le mois
 
#params
OPTS='--defaults-file=/etc/mysql/debian.cnf'
# pour avoir une ligne par insert (commenter la ligne suivante pour le mode "normal")
# OPTS='--defaults-file=/etc/mysql/debian.cnf --complete-insert --extended-insert=FALSE'
 
# la liste des bases (faut virer la 1re ligne qui est le titre "Database")
LISTDB="$(mysql --defaults-file=/etc/mysql/debian.cnf -e 'show databases;'|sed -e '1d')"
DUMPREP=/home/mysqldump
FICHLOG=/var/log/mysqldump.log
DF_PATTERN_PARTITION='/\/$/'; # ici, DUMPREP est sur la partition /, si partition home, mettre DF_PATTERN_PARTITION='/\/home$/'
MIN_SIZE=90
 
if [ ! -d $DUMPREP ]
then
  echo "Le rep $DUMPREP n'existe pas" 
  exit 1
fi
 
# on met la date en anglais (august mieux que août, mais aussi pour uniformiser suivant les machines)
if [ "$(grep -c '^en_GB.UTF-8' /etc/locale.gen)" = "1" ]
then
  export LC_ALL='en_GB.UTF-8'
  export LANG='en_GB.UTF-8'
elif [ "$(grep -c '^en_US.UTF-8' /etc/locale.gen)" = "1" ]
then
  export LC_ALL='en_US.UTF-8'
  export LANG='en_US.UTF-8'
# pas de else, on laisse la locale courante
fi
 
 
cd $DUMPREP
echo "$(date '+%F_%T') BEGIN script $0">>$FICHLOG
# pour limiter la duree du dump, on compresse apres
for base in $LISTDB
do
   # on vérifie qu'il reste de l'espace disque
   occup=$(df |sed -e "$DF_PATTERN_PARTITION"' !d; s/[^ ]* *[^ ]* *[^ ]* *[^ ]* *\([0-9]*\)%.*/\1/')
   if [ $occup -lt $MIN_SIZE ]
   then
     nom=${base}_$(date '+%A')
     echo -n "$(date '+%F_%T') Begin $base " >> $FICHLOG
     /usr/bin/mysql $OPTS -e 'show master status'|awk 'END {print $1 " " $2}' >> $FICHLOG
     # cf http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html
     nice mysqldump $OPTS --lock-tables $base > "$nom.sql" && \
	echo -n "$(date '+%F_%T') End $base " >>$FICHLOG && \
       /usr/bin/mysql $OPTS -e 'show master status'|awk 'END {print $1 " " $2}' >> $FICHLOG
   else  
     echo "Plus assez de place (< $MIN_SIZE) pour dump sql"
   fi
done
 
# compression
for base in $LISTDB
do
  nom=${base}_$(date '+%A')
  [ -f "$nom.sql" ] && nice bzip2 -f "$nom.sql"
  # copie avec le nom du mois si on est le 1er
  if [ $(date '+%d') == '01' ]
  then
    nom2=${base}_$(date '+%B')
    cp -a $nom.sql.bz2 $nom2.sql.bz2
  fi
done
echo "$(date '+%F_%T') END script $0">>$FICHLOG
linux/scripts_bash/exemples/sqldump.1282221560.txt.gz · Dernière modification : 19/08/2010 14:39 de daniel