samedi, 7 mars 2009

sauvegarder une base Mysql

Les quelques blogs que j'héberge fonctionnent souvent de paire avec une base de donnée de type Mysql ou Postgre. Ayant déjà fais la mauvaise expérience de perdre l'intégralité d'une base de donnée; j'ai décidé de réaliser une sauvegarde de la base mysql de mon blog et les sauvegarder sur une machine appartenant à mon réseau domestique.

Le principe

Pour sauvegarder une base; il est important de figer l'état de celle ci afin de conserver l'intégrité des données. Pour cela on pose un lock sur une base, le temps de la copie des données. Les requêtes en queue seront mise en attente ainsi que toutes les nouvelles requêtes entrantes. Ce n'est qu'une fois le lock sur la base levé; les requêtes en attente seront ensuite traitées selon le principe FIFO.

Le temps du lock il ne reste plus qu'à copier les fichiers relatifs à la base de donnée en utilisant une méthode de votre choix.

Méthode utilisée

Pour réaliser cette tache; nous utiliserons un script perl fourni par les packages Mysql; j'ai nommé mysqlhotcopy. Ce script offre le grand avantage de poser lui mêmes les locks nécessaires sur la base avant de réaliser le dump de la base. Il lèvera lui même les locks une fois l'action effectuée. Il permet également la sauvegarde sur une machine distante via le protocole ssh. Il existe bien évidement d'autres méthodes pour réaliser un dump de la base Mysql comme l'utilisation de snapshots LVM ou encore un système de réplication entre deamon MySql; Nous aborderons la réplication dans un article à venir.

Procédure

Bon voici donc les commandes nécessaires afin de réaliser le dump

Sauvegarde

La sauvegarde de la base dans son intégralité enregistré dans un fichier DBblog.sql

server@tosave# mysqldump --user=blog -p --flush-logs --single-transaction blog > DBblog.sql

Restauration

on copie ensuite le fichier sql DBblog.sql sur le serveur local puis via la commande suivante; on insère les données dans la base locale.

server@local# mysql --user=blog -p --database=blog < /var/lib/mysql/DBblog.sql

Voila notre base est a présent sauvegardée.

Liens connexes:

http://www.cryer.co.uk/brian/mysql/howto_backup.htm