Etant donné que les tables de MySQL sont enregistrées sous la forme de fichiers, les sauvegardes sont très faciles à faire. Pour créer une sauvegarde cohérente, verrouillez les tables dont vous avez besoin avec LOCK TABLES
. LOCK TABLES
. Vous n'aurez besoin que d'un verrou de lecture, cequi permettra aux autres threads de continuer à interroger la base, tout en vous laissant le champs libre pour faire la copie des fichiers de la base. Si vous voulez faire une requête SQL pour sauver la table, utilisez donc SELECT INTO OUTFILE
.
Un autre moyen de faire des sauvegardes d'une base de données est d'utiliser l'utilitaire mysqldump
:
-
Sauvegarde complète des bases de données :
shell> mysqldump --tab=/path/to/some/dir --lock-tables --opt
Vous pouvez aussi simplement faire une copie de touts les fichiers de tables (``*.frm'', ``*.ISD'' et ``*.ISM''), tant que le serveur ne fait pas de modiication.
-
Stoppez le serveur
mysqld
si il était lancé, puis relancez le avec l'option --log-update
. Vous allez obtenir des fichiers d'historique avec des noms du type ``nomDHote.n'', où n
est un nombre incrémenté à chaque fois que vous faites un mysqladmin refresh
ou mysqladmin flush-logs
, une commande FLUSH LOGS
statement, ou que vous redémarrez le serveur. Ces fichiers d'historiques fournissent les informations dont vous aurez besoin pour répliquer une base, ou la régénérer à partir de la sauvegarde faite avec mysqldump
.
Si vous devez reconstruire une base ou une table, essayer d'abord de récupérer vos tables avec isamchk -r
. Cet utilitaire fonctionne dans 99.9% des cas. Si isamchk
échoue, utilisez la procédure suivante :
-
Réinstallez la sauvegarde originale à partir de
mysqldump
.
-
Lancez la commande suivante pour re excécuter les modifications à partir des fichiers d'historique
shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
ls est utilisé pour mettre les fichiers d'historiques dans le bon ordre.
Vous pouvez aussi effectuer des sauvegardes sélectives avec SELECT * INTO OUTFILE 'nom_de_fichier' FROM nom_table
et les recharger avec LOAD DATA INFILE 'nom_de_fichier' REPLACE ...
Pour éviter d'avoir des enregistrements en double, utilisez une colonne de type PRIMARY KEY
ou UNIQUE
dans la table. L'option REPLACE
forcera le remplacement des anciens enregistrements par les nouveaux, dès que l'on tentera de doubler une valeur de la clé unique.