• Accueil
  • Mes publications
    • Interview de Yannick Le Briquer, DG d'Anakeen
  • Success Story
    • Virtualbox 4.1 + Bodhilinux 1.2.0 + kernel 3.0, le trio gagnant
    • Passer de Debian Lenny-Postgresql 8.3 à Debian Squeeze-Postgresql 8.4 sans douleurs
    • Sauvegarde des bases Mysql/MariaDB avec Xtrabackup
  • A propos...
  • Me contacter...
Success Story Sauvegarde des bases Mysql/MariaDB avec Xtrabackup

Sauvegarde des bases Mysql/MariaDB avec Xtrabackup

21 juillet 2011 18:37 0 commentaires
Dans une vie professionnelle passée, j’ai eu l’occasion de faire du développement Web (plateforme LAMP), et donc d’utiliser Mysql. Dans le poste que j’occupe actuellement, j’ai du à nouveau fricoter avec le moteur de base de données Mysql dans un premier temps et migration vers MariaDB depuis quelques mois déjà. Alors pourquoi MariaDB ? Tout simplement parce qu’avec le rachat de Sun par Oracle, les orientations que donne ce dernier concernant les logiciels open source ne sont pas en phase avec ma philosophie. Tout ce que je peux dire, c’est que ce basculement a été totalement transparent que ce soit pour les utilisateurs ou pour moi côté administration.

Rentrons dans le vif du sujet, j’ai donc développé une application client/serveur qui permet de gérer nos calculs de prix de revient et Mysql/MariaDB s’est imposé naturellement à moi sachant que l’alternative qui aurait pu être PostgreSQL est un domaine inconnu pour moi.

Au niveau du script que j’utilise, j’ai opté pour Xtrabackup édité par la société Percona. Je vais vous citer quelques points qui m’ont paru essentiels dans mon choix :

  • Licence GPL
  • permet les backups avec les bases InnoDB ou Myisam
  • ne bloque pas les enregistrements et fait des sauvegardes à chaud des tables InnoDB
  • effectue la sauvegarde sans « charger » le serveur
  • …


Vous trouverez tous les avantages cités par Percona ici. La méthode que j’utilise est une méthode parmi tant d’autres mais elle me donne entière satisfaction, néanmoins, toutes vos remarques sont les bienvenues ! :)

Le serveur est un serveur Debian 6.0 Squeeze qui est para virtualisé via OpenVZ. On ajoute les dépôts de Percona pour permettre l’installation de Xtrabackup :

deb http://repo.percona.com/apt squeeze main
deb-src http://repo.percona.com/apt squeeze main

On installe la clé pour le dépôt :

# gpg --keyserver  hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
... [some output removed] ...
gpg:               imported: 1

# gpg -a --export CD2EFD2A | apt-key add -
puis on met à jour ses dépôts et on installe le logiciel :

# apt-get update && apt-get install xtrabackup
Mon cahier des charges était simple :

  • Sauvegarder les bases de données du lundi au vendredi inclus de 8 à 19h
  • Ne garder que 3 jours de sauvegardes de bases


J’ai donc écrit mon script :

#!/bin/sh

#on purge les backups de plus de 3j
/usr/bin/find /root/backup_sql/mysql_hot_*.tar.gz -type f  -mtime +3 | xargs rm -f 

#on crée la sauvegarde des bases
/usr/bin/innobackupex-1.5.1 --defaults-file=/etc/mysql/my.cnf --user='root' --password='XXXX' --no-lock --stream=tar --slave-info /root/backup_sql | gzip - > /root/backup_sql/mysql_hot_`/bin/date +%m-%d-%Y-%H_%M`.tar.gz
Une petite explication sur les paramètres me parait judicieux :

  • –defaults-file=/etc/mysql/my.cnf : permet de lire les options de votre fichier my.cnf dont Xtrabackup a besoin
  • –user=’root’ –password=’XXXX’ : spécifie le login de l’utilisateur et le mot de passe qui sont utilisés pour effectuer la connexion au serveur
  • –no-lock : permet de ne pas verrouiller les tables lors de la sauvegarde
  • –stream=tar : permet de rediriger le flux standard vers un fichier tar ici
  • | gzip – > /root/backup_sql/mysql_hot_`/bin/date +%m-%d-%Y-%H_%M`.tar.gz : permet de récupérer la sortie standard de l’option précédente pour la compresser à la volée dans un fichier .tar.gz et qui portera un nom du style mysql_hot_12-24-2010-11_00.tar.gz mentionnant ainsi la date ainsi que l’heure de sauvegarde (rappelez vous que j’effectue une sauvegarde toutes les heures)
  • /root/backup_sql : lieu de sauvegarde en local des bases


Ces archives sont également dans la foulée poussées sur un NAS et sur le serveur de secours (ici MixMysql2). Le tout se fait via le cron :

# m h  dom mon dow   command
0       9-19    *       *       mon,tue,wed,thu,fri     /root/innobck.sh && rsync -e ssh -avz --delete-after /root/backup_sql/ root@172.20.1.60:/data/mixmysql/
10      9-19    *       *       mon,tue,wed,thu,fri     /usr/bin/scp /root/backup_sql/*.tar.gz  root@mixmysql2:/root/backup_sql/
Voilà pour la sauvegarde. Passons maintenant à la restauration de nos bases le cas échéant. Comme précédemment, j’ai créé un script de restauration qui effectue toutes les étapes nécessaires :

#!/bin/bash

if [ -z "$1" ]
  then
        echo "usage ./restore.sh nomdufichier a restaurer"
	exit;
fi

#Arret du serveur Mysql
echo "Arret du serveur Mysql"
/etc/init.d/mysql stop

#Renommage du rep des data de mysql && suppression d'une vieille restauration
echo "Renommage du repertoire de donnees Mysql"
rm -Rf /var/lib/mysql_old
mv /var/lib/mysql /var/lib/mysql_old

#Creation du rep data de mysql
echo "creation du repertoire mysql"
mkdir /var/lib/mysql

#Copie de l'archive dans le rep data Mysql
echo "Copie de l'archive a restaurer"
cp /root/backup_sql/$1 /var/lib/mysql

#Décompression de l'archive
echo "Decompression de l'archive"
cd /var/lib/mysql && tar xvzfi $1

#Chgt des droits Mysql
echo "Changement de droits des fichiers"
chown -R mysql:mysql /var/lib/mysql

#Effacement de l'archive dans le dossier data
echo "Purge de l'archive dans le dossier data de mysql"
rm -f /var/lib/mysql/$1

#Relance du serveur
echo "Relance du serveur"
/etc/init.d/mysql start
Le fichier est relativement bien commenter, il faut donc lancer la restauration en invoquant le script adéquat en lui passant en paramètre le nom de l’archive à restaurer :

# ./root/restore.sh mysql_hot_12-24-2010-11_00.tar.gz
Et voilà, le serveur est comme il était le 24/12/2010 à 11h00 :)

Cette méthode est une méthode parmi tant d’autres mais c’est celle qui est en production chez nous. Je vous invite me donner vos retours bons ou mauvais du moment qu’ils sont constructifs. Pour aller plus loin, vous pouvez aller consulter la page officielle d’Xtrabackup sur le site de Percona.

Bonne sauvegarde !





Vous pourriez être intéressé par....

  • SemanticScuttle, un moyen très simple de partager ses favoris à la sauce delicious
  • Mysql Cluster, toi aussi tu peux y goûter facilement !
  • HeidiSQL, non ça n'a rien à voir avec le dessin animé !

Laisser un commentaire

Cliquez ici pour annuler la réponse.


Image CAPTCHA
Rafraîchir l'image
*

Recherche

Taille de la police
Promouvoir et soutenir le <a href=
Suivre le blog au fil des jours

Blogroll

  • Blog d'iMil
  • Blog de Bapt
  • Blog de Nicolargo
  • EzUnix
  • FJob
  • Le blog de Maester
  • NetBSDfr

Archives

Catégories

Sponsors

Haut de page

Mots-clefs

administration backup bash blog cms code css debian design développement facebook firefox framework free games git github GNU/Linux google google code graphisme html javascript jeux linux monitoring mysql opensource pdf php réseau security server shell ssh sysadmin sécurité thèmes tutorial tutoriel twitter ubuntu web webdev wordpress

Mes twitts…

Derniers articles

  • Ifixit, le wikipedia des manuels de réparations !
  • La mise en place d’un ERP, une réorganisation implicite mais …
  • L’hygiène informatique en entreprise – règles de base pour bien commencer
  • Le quotidien des informaticiens en BD… et sur le Web, c’est par ici les webcomics !
  • CSS Junction, des tutoriels à gogo par et pour les Webdesigners !

Derniers commentaires

  • Dire que cette application ne mérite pas son...
    By zatmania
  • Ça m'a l'air vraiment sympa mais le gros...
    By Dimitri
  • Après une recherche rapide sur le net, j'ai...
    By zatmania
  • Merci de ta réponse j'ai pu m'ensortir un...
    By Anonyme

Licence

Contrat Creative Commons
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité 3.0 non transcrit.