Sauvegarde à froid avec MySQL, avoir les bons réflexes
En marge de mon article sur les backups à froid avec RMAN, je vous propose un petit point sur la sauvegarde à froid avec MySQL.
En effet, la sauvegarde à froid n’est plus forcement la plus utilisée de nos jours mais elle s’avère parfois la solution la plus simple à mettre en oeuvre.
Il faut simplement avoir toutes les clés en main pour assurer une restauration sans stress.
La sauvegarde à froid, qu’est-ce que c’est ?
Quand je parle de sauvegarde à froid, je parle évidemment de sauvegarde des fichiers physiques de vos bases de données.
Une sauvegarde à froid consiste donc à sauvegarder tous les fichiers vitaux des bases de données alors que l’instance MySQL est arrêtée ou que les écritures sont gelées.
Les fichiers à sauvegarder dépendent du ou des moteurs de stockage utilisés :
- MyISAM : sauvegarder tous les fichiers .FRM, .MYI et .MYD
- InnoDB : sauvegarder tous les fichiers .FRM, les fichiers de données (ibdata), les fichiers des tables .ibd (si vous êtes en innodb_file_per_table) et les fichiers journaux (iblogfile)
Avec MyISAM, si vous avez utilisé les clauses DATA DIRECTORY ou INDEX DIRECTORY dans les instructions de création de vos tables, vous vous retrouvez avec des liens symboliques dans le répertoire datadir.
Attention, donc, à ne pas sauvegarder les liens à la place des fichiers de données !
La sauvegarde à froid peut également être mise en oeuvre sur un esclave de réplication afin de ne pas perturber votre production.
Les avantages et inconvénients
Rapidement, quelques avantages et inconvénients de la sauvegarde à froid :
(qui peuvent s’appliquer pour certains à la sauvegarde physique à chaud)
- (+) Restauration plus rapide qu’avec un backup via mysqldump
- (+) Adaptée aux grosses volumétries
- (+) Restauration simplifiée
- (-) Pas d’outil fourni par MySQL
- (-) L’arrêt de l’instance signifie la perte de tous les caches de base de données
- (-) Moins portable qu’un dump
- (-) Prise en charge des logs binaires plus complexe
La méthode, avec ou sans logs binaires
La méthode dépend effectivement de l’utilisation ou non des logs binaires dans le processus de sauvegarde.
En effet, si vous souhaitez utiliser les logs binaires comme sauvegarde incrémentale, il sera nécessaire de le prendre en compte dans votre méthode de sauvegarde à froid.
MySQL ne fourni pas d’outil permettant de réaliser une sauvegarde à froid, il faudra donc se débrouiller avec les moyens du bord.
Méthode 1 : Sans prise en compte des logs binaires
- Arrêter l’instance MySQL et vérifier qu’elle s’est arrêtée sans erreur dans le log d’erreur
- Copier tous les fichiers de données mentionnés plus haut (MyISAM et InnoDB) vers le répertoire de sauvegarde
- Copier les fichiers de journaux InnoDB
- Copier également le fichier de configuration MySQL (my.cnf), ça ne peut pas faire de mail
- N’oubliez pas les fichiers .frm de vos tables
- Relancer l’instance MySQL
Méthode 2 : Prise en compte des logs binaires
- Dans une première session, figer les écritures via la commande suivante : flush tables with read lock;
- Dans cette même session, récupérer les informations du log binaire en cours : show master status;
- Sauvegarder ces informations, elles seront indispensables pour savoir à partir de quel log binaire et de quelle position partir en cas de restauration
- A ce stade, attention à ne pas se déconnecter de cette première session car cela aurait pour effet d’annuler le verrouillage posé à la première étape
- Dans une seconde session, arrêter l’instance MySQL : /etc/init.d/mysql.server stop
- Vérifier qu’elle s’est arrêtée sans erreur dans le log d’erreur
- Copier tous les fichiers de données mentionnés plus haut (MyISAM et InnoDB) vers le répertoire de sauvegarde
- Copier les fichiers de journaux InnoDB
- Copier également le fichier de configuration MySQL (my.cnf), ça ne peut pas faire de mail
- N’oubliez pas les fichiers .frm de vos tables
- Relancer l’instance MySQL
Notez qu’avec cette méthode, vous pouvez également copier les fichiers sans arrêter MySQL puisque les écritures sont figées à la première étape.
Simplement, la plupart des fichiers seront ouverts, ça peut poser des problèmes sur certaines plateformes ou avec certains outils de sauvegarde de fichiers.
Concernant la perte des caches lors de l’arrêt de MySQL, sachez que le moteur xtraDB permet la sauvegarde/restauration du cache de données : http://www.mysqlplus.fr/2010/03/xtradb-sauvegarde-votre-cache-et-ca-marche/
N’hésitez pas à apporter votre propre expérience dans les commentaires.
![MySQL[Plus]](http://www.mysqlplus.fr/wp-content/uploads/2013/01/plus_logo_fr_mini.png)




