4.4 Prévention des désastres et restauration
4 Administration du serveur
Manuel de Référence MySQL 4.1 : Version Française
->Sauvegardes de base de données . Syntaxe de BACKUP TABLE . Syntaxe de RESTORE TABLE . Syntaxe de CHECK TABLE . Syntaxe de REPAIR TABLE . Utilisation de myisamchk pour la maintenance des tables et leur recouvrement . Mettre en place un régime d'entretien de MySQL . Obtenir des informations sur une table
|
4.4.1 Sauvegardes de base de données
Comme les tables MySQL sont stockées sous forme de fichiers, il est facile
d'en faire une sauvegarde. Pour avoir une sauvegarde consistante, faites
un
LOCK TABLES
sur les tables concernées suivi d'un
FLUSH TABLES
pour celles-ci. Syntaxe des
LOCK TABLES/UNLOCK TABLES
.
Syntaxe de
FLUSH
.
Vous n'avez besoin que d'un verrou en lecture; cela permet aux autre threads de
continuer à effectuer des requêtes sur les tables dont vous faites la copie des
fichiers dans le dossier des bases de données.
FLUSH TABLE
est requise
pour s'assurer que toutes les pages d'index actifs soient écrits sur le disque
avant de commencer la sauvegarde.
Si vous voulez faire une sauvegarde d'une table avec SQL, vous pouvez utiliser
SELECT INTO OUTFILE
ou
BACKUP TABLE
. Syntaxe des
SELECT
.
Syntaxe de
BACKUP TABLE
.
Une autre façon de sauvegarder une base de données est d'utiliser l'utilitaire
mysqldump
ou le
script mysqlhotcopy
.
mysqldump
, exporter les structures de tables et les données .
mysqlhotcopy
, copier les bases et tables MySQL .
- Effectuez une sauvegarde complète de votre base de données :
shell> mysqldump --tab=/chemin/vers/un/dossier --opt --all ou shell> mysqlhotcopy base /chemin/vers/un/dossier
|
Vous pouvez aussi copier tout simplement tous les fichiers de tables (les fichiers
*.frm
,
*.MYD
, et
*.MYI
) du moment que le serveur ne met rien à jour.
Le script
mysqlhotcopy
utilise cette méthode.
- Arrêtez
mysqld
si il est en marche, puis démarrez le avec l'option
--log-update[=nom_fichier]
. Le log des mises à jour . Le ou les fichiers de log
fournissent les informations dont vous avez besoin pour répliquer les modifications
de la base de données qui sont subséquents au moment où vous avez exécuté
mysqldump
.
Si vous avez besoin de restaurer quelque chose, essayez d'abord de recouvrer
vos tables avec
REPAIR TABLE
ou
myisamchk -r
en premier. Cela devrait
fonctionner dans 99.9% des cas. Si
myisamchk
ne réussi pas, essayez la procédure
suivante (cela ne fonctionnera que si vous avez démarré MySQL avec
--log-update
,
Le log des mises à jour ) :
- Restorez le backup original de
mysqldump
.
- Exécutez la commande suivante pour remettre en marche les mises à jours dans le log binaire :
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
|
Si vous utilisez le journal des mises à jour vous pouvez utiliser :
shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
|
ls
est utilisée pour avoir tous les fichiers de mise à jour dans le bon
ordre.
Vous pouvez aussi faire des sauvegardes sélectives avec
SELECT * INTO OUTFILE
'nom_fichier' FROM nom_de_table
et restaurez avec
LOAD DATA INFILE 'nom_fichier'
REPLACE ...
Pour éviter les lignes dupliquées, vous aurez besoin d'une
PRIMARY KEY
ou une clef
UNIQUE
dans la table. Le mot clef
REPLACE
fait que les anciens
enregistrements sont remplacés par les nouveaux lorsque l'un d'eux duplique un ancien sur une
valeur de clef unique.
Si vous obtenez des problèmes de performances sur votre système, vous pouvez les contourner
en mettant en place une réplication et faisant les copies sur l'esclave au lieu du maître.
Introduction .
Si vous utilisez un système de fichiers Veritas , vous pourrez faire :
- A partir d'un client (ou de Perl), exécutez :
FLUSH TABLES WITH READ LOCK
.
- A partir d'un autre shell, exécutez :
mount vxfs snapshot
.
- Depuis le premier client, exécutez :
UNLOCK TABLES
.
- Copiez les fichiers à partir de snapshot.
- Démontez snapshot.
|