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 Section 13.4.5, « Syntaxe de LOCK TABLES/UNLOCK TABLES
» et
Section 13.5.4.2, « 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 Section 13.1.7, « Syntaxe de SELECT
»
et Section 13.5.2.2, « 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
Section 8.8, « mysqldump
, sauvegarde des structures de tables et les
données » et Section 8.9, « 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]
. See
Section 5.9.3, « Le log de modification ». 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
, Section 5.9.4, « Le log binaire ») :
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
Section 8.5, « mysqlbinlog
, Exécuter des requêtes dans le log
binaire » 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. See Section 6.1, « Introduction à la réplication ».
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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.