Mysql backups

Quand on a des bases à sauvegarder on souhaite que leur disponibilité reste maximale.

Mais on souhaite aussi les sauvegarder, pour la même raison.  Voici quelques notes sur le sujet.

1) Outils MySQL

a) MySQLdump

Fonctionnement :  outil Mysql qui extraie le contenu des bases.
Exécution : mysqldump –opt –single-transaction –quick –routines -uroot -p mabase > /var/backups/mabase.sql
Restauration : mysql  intranetse -uroot -p < /var/backups/mabase.sql
Temps de la sauvegarde : 3 minutes
Pré-requis : les tables doivent être en InnoDB pour utiliser l’argument « –single-transaction »
Avantages : connu, simple
Inconvénient : si on a une modification de tables (alter, drop, create, rename truncate) au moment ou on sauvegarde -> risque (faible) de perte de données
Conclusion : insuffisant

b) Mysqlhotcopy

Fonctionnement : script perl qui copie les fichiers en procédant à un lock des tables
Exécution : mysqlhotcopy -u=root intranetse -p=versatile /var/backups/mabase
Restauration : /etc/init.d/mysqld stop; cp -r /var/backups/mabase/* /var/lib/mysql/mabase/; chown -R mysql:mysql /var/lib/mysql/* ; /etc/init.d/mysqld start
Temps : quelques secondes
Pré-requis : Tables en MyISAM
Avantages : très rapide
Inconvénient : MyISAM seulement, « lock-tables » durant la sauvegarde, et stop du service SQL pour la restauration, fonctionne uniquement en local
Conclusion : on oublie

2) MySQL en cluster

Fonctionnement : arrêt de la réplication, dump, relance de la réplication, copie du dump vers le master.
Exécution : mysqladmin stop slave, mysqldump, mysqladmin start slave
Restauration : mysql  mabase -uroot -p < /var/backups/mabase.sql
Temps : quelques minutes (1Go / mn  pour le dump et 40 Mo/s pour la copie)
Dégradation du service : oui quelques minutes
Pré-requis : master / slave ou master / master avec service de VIP
Avantages : service absolument ininterrompu côté master
Inconvénient : identification du slave par script
Conclusion : adopté

3) LVM

Fonctionnement : snapshot d’un volume LVM, montage du volume, lancement d’un 2e mysql, dump
Exécution : paquet mylvmbackup à compiler, ou script ci-dessous
Restauration : mysql  mabase -uroot -p < /var/backups/mabase.sql
Temps : sauvegarde : rapide pour LVM, quelques minutes pour le dump / restauration : quelques minutes
Dégradation du service : très réduit
Pré-requis : avoir LVM installé, configuré, et avec de l’espace disponible dans le VG comportant la partition « / » ou « /VAR »
Avantages : sauvegarde réutilisable pour d’autres applications, voir le système entier
Inconvénient : pré-requis, peu maîtrisé
Conclusion : Utilisable, mais trop contraignant au niveau des pré-requis

MYSQL cluster BACKUP

 #!/bin/sh
 # definition de la date
 datum=`/bin/date +%Y-%m-%d`
 # definition du pass root
 rootpass="rootpass"
 # definition du repertoire de sauvegarde
 FILEDIR="/var/backups/mysql"
 # limite d'espace disk pour l'execution du script en pourcentage
 limit=85

 # Verification de l'espace disk occupe par le repertoire FILEDIR
 for line in `df -aPh $FILEDIR | grep "^/" | grep \% | sort | awk '{print$6"-"$5"-"$4}'`; do
 percent=`echo "$line" | awk -F - '{print$2}' | cut -d % -f 1`
 done

 # stop le script si la limite est atteinte
 if [ $percent -ge $limit ]; then
 exit
 fi

 # Cluster : on verifie que l'on est sur le slave
 HOSTNAME=`cat /etc/hostname`
 OTHERNODE=` grep node /etc/ha.d/ha.cf | cut -d' ' -f2 | grep -v $HOSTNAME`
 IFCONFIG="/sbin/ifconfig"
 IFACE="eth0:0"
 ISIT=`$IFCONFIG | grep $IFACE | wc -l`;
 if test $ISIT = 0;
  then
 # On arrete le slave le temps de la sauvgearde
   mysqladmin -p$rootpass stop-slave;

   # Dump des bases et suppression de fichier plus vieux de 7 jours
   for i in `find /var/lib/mysql/* -type d`; do
       a=`echo $i | cut -d / -f 5`
       mysqldump -p$rootpass --opt $a | gzip >  $FILEDIR/$a.${datum}.backup.gz
       scp $FILEDIR/$a.${datum}.backup.gz $OTHERNODE:$FILEDIR/
     find $FILEDIR/ -type f -mtime +7 -exec rm -vf {} \;
   done
 # on relance le process de replication
   mysqladmin -p$rootpass start-slave;

 else
   exit
 fi
 

SCRIPT LVMBACKUP

 #!/bin/bash
 #
 # Script de sauvegarde Mysql via LVM
 # v. 0.1

 # Valeurs
 DBPASS="rootpass"
 # TODO : recuperer le LV contenant les datas SQL
 MONVG="/dev/ROOTVG/VAR"
 MYBKP=/mnt/backup
 MYINNODB="mysqladmin variables -uroot -p$DBPASS | grep innodb_log_file_size | cut -d'|' -f3 | cut -d' ' -f2"
 MYSQLSOCK2="/var/run/mysqld/mysql-snapshot.sock"
 FILEDIR="/var/backups/mysql"

 # Etape 1 : flush des tables
 mysql -e "FLUSH TABLES WITH READ LOCK;" -p$DBPASS

 # Creation du snapshot
 lvcreate -l100%FREE -s -n dbbackup $MONVG

 # Etape 3 : liberation des tables
 mysql -e "UNLOCK TABLES;" -p$DBPASS

 # Etape 4 : repertoire de montage
 mkdir -p $MYBKP

 # Etape 5 : On monte le snapshot
 mount /dev/ROOTVG/dbbackup $MYBKP

 # Etape 6 : On relance un nouveau SQL
 mysqld_safe --no-defaults --port=3307 --socket=$MYSQLSOCK2 --datadir=$MYBKP/lib/mysql --innodb-log-file-size=$MYINNODB &

 # Etape 7 : dump
 for i in `find $MYBKP/lib/mysql -type d`; do
     a=`echo $i | cut -d / -f 5`
     mysqldump -S $MYSQLSOCK2 -p$rootpass --opt $a | gzip >  $FILEDIR/$a.${datum}.backup.gz
 find $FILEDIR/ -type f -mtime +7 -exec rm -vf {} \;
 done

 # Etape 8 : on arrete le SQL Secondaire
 mysqladmin -S $MYSQLSOCK2 shutdown
 kill -9 $(pgrep mysqld_safe)

 # Etape 9 : on demonte
 umount $MYBKP

 # Etape 10 : suppression du snapshot
 lvremove -f /dev/ROOTVG/dbbackup

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload the CAPTCHA.