Administration du serveur
<<<
Sauvegardes de base de données Utilisation de myisamchk pour la maintenance des tables et leur recouvrement
>>>

5.6 Prévention des désastres et restauration
5 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française

->Sauvegardes de base de données
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

5.6.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. Voyez Syntaxe de LOCK TABLES et UNLOCK TABLES et 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 . Voyez Syntaxe de SELECT et 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 . Voyez mysqldump , exporter les structures de tables et les données et 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 votre serveur MySQL est un esclave, quelque soit la sauvegarde que vous utilisez, lorsque vous sauvez vos données sur votre esclave, vous devez aussi sauver les fichiers master.info et relay-log.info , qui sont nécessaires pour relancer la réplication après la restauration des données de l'esclave. Si votre esclave doit traiter des commandes LOAD DATA INFILE , vous devez aussi sauver les fichiers nommés SQL_LOAD-* , qui sont dans le dossier spécifié par --slave-load-tmpdir . Ce dossier vaut par défaut la valeur de la variable tmpdir , si elle n'est pas spécifiée. L'esclave aura besoin de ces fichiers pour relancer la réplication d'une opération LOAD DATA INFILE interrompue.

Si vous avez besoin de restaurer quelque chose, essayez d'abord de restaurer 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 binaire des mises à jour ) :
  • Restaurez la sauvegarde originale de mysqldump .
  • Exécutez la commande suivante pour remettre en marche les mises à jour dans le log binaire :
    
    shell> mysqlbinlog hostname-bin.[0-9]* | mysql
    
    Dans votre cas, vous voudrez peut-être n'exécuter que certains logs binaires, depuis certaines positions : par exemple, depuis la date de la sauvegarde que vous avez restauré, hormis quelques requêtes problématiques. Voyez L'utilitaire binaire mysqlbinlog pour plus d'informations sur l'utilitaire mysqlbinlog , et comment l'utiliser.

    Si vous utilisez le journal des mises à jour (qui a été supprimé en MySQL 5.0.0) 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 de fichiers individuels :
  • Exportez la table avec SELECT * INTO OUTFILE 'nom_fichier' FROM nom_de_table
  • 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 la sauvegarde.
  • Démontez snapshot.

<< Sauvegardes de base de données >>
Administration du serveur Prévention des désastres et restauration Utilisation de myisamchk pour la maintenance des tables et leur recouvrement