Sauvegarde Mysql

Transcription

Sauvegarde Mysql
Backupmysql
Sauvegarde Mysql
Sauvegarde logique
La sauvegarde des bases de données peut se réaliser à travers d'un des outils les plus connus: mysqldump. Avant
d'effectuer un backup, Il faut prendre des précautions tels que: l'arrêt des transactions et/ou le blocage des tables.
Ceci est valable quelque soit le moteur myisam ou innodb.
Myisam
Par exemple, si notre base de données ne contient que des tables MyISAM et que vous souhaitez que toutes les
tables soient cohérentes dans l?export, vous utiliserez la commande :
shell> mysqldump -u mon_user -p toto > dump_myisam-toto.sql
Il faut savoir que l?option --opt, qui implique l?option --lock-tables, est activée par défaut. Ceci est valable pour les
tables d'une même base. Si vous souhaitez réaliser une sauvegarde entière de toutes les bases, il faudra utiliser
l'option: --lock-all-tables
mysqldump -u mon_user -p --lock-all-tables -B toto2 blog > dump_myisam-dabatabases.sql
InnoDB
Dans le moteur mysql fonctionne en innodb, il faut juste se poser la question si toutes les bases sont innodb ou
inndb et myisam
mysqldump -u mon_user -p --lock-all-tables -B toto2 blog > dump_innodb-databases.sql
Dans le cas où notre base n?utiliserait que le moteur InnoDB, il faudrait utiliser l?option --single-transaction afin
de ne pas poser de verrou au niveau table puisque le moteur de stockage est InnoDB
en résumé, - Il faudra utiliser des verrous au niveau table (--lock-tables ou --lock-all-tables) si certaines tables ne
supportent pas le mode transactionnel(on trouve souvent ce cas) - Il faudra utiliser (--single-transaction) si toutes
les tables utilisent un moteur transactionnel comme InnoDB
Sauvegarde physique
MyIsam
Pour sauvegarder une base MyISAM, il est nécessaire de copier tous les fichiers de structure (.frm), les fichiers de
données (.MYD) et les fichiers d?index (.MYI).
- Il faut locker tour à tour toutes les tables
Sauvegarde Mysql
1
Backupmysql
mysql> LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ, t..READ;
- Copier les fichiers physiques en préservant les permissions
- Relâcher les blocages des tables afin de permettre de nouveau l'exécution des requêtes sur ces tables.
mysql> UNLOCK TABLES;
Innodb
Pour sauvegarder physiquement une base InnoDB, il faut :
- Poser un verrou global en lecture sur l?ensemble des tables (FLUSH TABLES WITH READ LOCK).
mysql>FLUSH TABLES WITH READ LOCK;
- Sauvegarder tous les fichiers.
- Relâcher le verrou (UNLOCK TABLES ou se déconnecter). mysql> UNLOCK TABLES;
Personnellement j'utilise cette méthode quelque soit le type de moteur. J'obtiens des tables cohérentes à la fin de la
restauration
Outils Mysql
mysqldump
mysqldump permet de faire des sauvegardes logiques, il ne faut donc pas oublier que la restauration risque d?être
très longue si la base de données est volumineuse
Voici les principales options de mysqldump :
-A, --all-databases : extrait toutes les bases.
-B, --databases : exporte toutes les bases passées en paramètre séparées par un espace.
--single-transaction : effectue la sauvegarde au sein d?une transaction afin de conserver la
--tables : exporte les tables passées en paramètre séparées par un espace.
-u, --user : spécifie le login à utiliser pour se connecter au serveur MySQL.
-p, --password : spécifie le mot de passe à utiliser lors de la connexion au serveur MySQL.
-P, --port : spécifie le port à utiliser pour se connecter au serveur MySQL.
-R, --routines : extrait les fonctions et les procédures. Cette option n?est pas activée par
--skip-extended-insert : désactive les insertions multiples, ce qui peut être utile lorsque l
Outils Mysql
2
Backupmysql
--opt : alias pour --add-drop-table --add-locks --create-options --disable-keys --extended-in
-d, --no-data : n?exporte pas le contenu des tables. Utile si vous ne voulez récupérer que la
-w, --where : pose un filtre sur les enregistrements exportés.
--skip-add-drop-database, --skip-add-drop-table, --no-create-db, --no-create-info : désactive
--master-data : ajoute la commande CHANGE MASTER TO dans la sortie, ce qui est utile pour cré
--tab : génère pour chaque table les fichiers nom_table.sql contenant la structure de la tabl
--flush-logs : force la création d?un nouveau fichier de journal binaire avant de commencer l
mysqlhotcopy
mysqlhotcopy est un script Perl, ne fonctionnant que sous Linux et en local, qui permet de sauvegarder
physiquement les tables MyISAM et Archive et qui utilisent les ordres SQL LOCK TABLES, FLUSH TABLES et
les commandes système cp et scp. Vous l?aurez compris malgré son nom, mysqlhotcopy ne fait pas de sauvegarde
hot (c?est-à-dire sans poser de verrou) mais plutôt une sauvegarde de type warm, c?est-à-dire que le serveur
MySQL répond aux requêtes des utilisateurs mais la sauvegarde peut en bloquer certaines en posant des verrous.
Les options principales du script mysqlhotcopy sont les suivantes :
--addtodest : ne renomme pas le répertoire de destination s?il existe déjà, mais y ajoute les
--allowold : si des fichiers de sauvegarde portant le même nom existent déjà dans le répertoi
--user : spécifie le login à utiliser pour se connecter au serveur MySQL.
--password : spécifie le mot de passe à utiliser lors de la connexion au serveur MySQL.
--port : spécifie le port à utiliser pour se connecter au serveur MySQL.
-n, --dryrun : affiche les actions à réaliser sans les effectuer.
--flushlog : force la création d?un nouveau fichier de journal binaire après avoir verrouillé
--method : indique la commande à utiliser pour copier les fichiers (cp ou scp).
--noindices : ne sauvegarde pas les fichiers d?index, ce qui permet de réduire la taille et d
--regexp : copie toutes les bases qui correspondent à l?expression régulière fournie en param
Imaginez que vous vouliez à présent sauvegarder la base db1 qui ne contient que des tables MyISAM dans le
répertoire /backup/, vous utiliserez la commande :
shell> mysqlhotcopy --user mon_user db1 /backup/
La commande mysqlhotcopy ne permet pas que le mot de passe soit demandé lors de l?exécution de la sauvegarde.
Il faut donc soit passer le mot de passe en ligne de commande, ce que l?on évitera pour des raisons de sécurité
mysqldump
3
Backupmysql
(possibilité de retrouver la commande utilisée dans l?historique par exemple), soit passer par un fichier de
configuration qui aura les droits d?accès adéquats. Pour cela, on crée le fichier .my.cnf dans le répertoire d?accueil
($HOME) avec le contenu suivant :
[mysqlhotcopy] password=mon_mot_de_passe
On prendra soin ensuite de supprimer les droits pour les autres utilisateurs :
shell> chmod go-rwx ~/.my.cnf
mysqlhotcopy
4

Documents pareils