MySQL - Exportation de base de données

Le moyen le plus simple d'exporter les données d'une table dans un fichier texte consiste à utiliser le SELECT...INTO OUTFILE instruction qui exporte un résultat de requête directement dans un fichier sur l'hôte du serveur.

Exportation de données avec l'instruction SELECT ... INTO OUTFILE

La syntaxe de cette instruction combine un SELECT commande avec INTO OUTFILE filenameà la fin. Le format de sortie par défaut est le même que pour la commande LOAD DATA. Ainsi, l'instruction suivante exporte letutorials_tbl table dans /tmp/tutorials.txt sous forme de fichier délimité par des tabulations et terminé par un saut de ligne.

mysql> SELECT * FROM tutorials_tbl 
   -> INTO OUTFILE '/tmp/tutorials.txt';

Vous pouvez modifier le format de sortie à l'aide de diverses options pour indiquer comment citer et délimiter les colonnes et les enregistrements. Pour exporter la table tutorial_tbl au format CSV avec des lignes terminées par CRLF, utilisez le code suivant.

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';

le SELECT ... INTO OUTFILE a les propriétés suivantes -

  • Le fichier de sortie est créé directement par le serveur MySQL, le nom de fichier doit donc indiquer où vous voulez que le fichier soit écrit sur l'hôte du serveur. Il n'y a pas de version LOCALE de l'instruction analogue à laLOCAL version de LOAD DATA.

  • Vous devez avoir le MySQL FILE privilège d'exécuter le SELECT ... INTO déclaration.

  • Le fichier de sortie ne doit pas déjà exister. Cela empêche MySQL de détruire des fichiers qui peuvent être importants.

  • Vous devez avoir un compte de connexion sur l'hôte du serveur ou un moyen de récupérer le fichier à partir de cet hôte. Sinon, leSELECT ... INTO OUTFILE la commande ne vous sera probablement d'aucune utilité.

  • Sous UNIX, le fichier est créé world readableet appartient au serveur MySQL. Cela signifie que bien que vous puissiez lire le fichier, vous ne pourrez peut-être pas le supprimer.

Exportation de tableaux sous forme de données brutes

le mysqldumpprogramme est utilisé pour copier ou sauvegarder des tables et des bases de données. Il peut écrire la sortie de la table sous la forme d'unRaw Datafile ou comme un ensemble de INSERT instructions qui recréent les enregistrements de la table.

Pour vider une table en tant que fichier de données, vous devez spécifier un --tab option qui indique le répertoire dans lequel vous voulez que le serveur MySQL écrive le fichier.

Par exemple, pour vider le tutorials_tbl table de la TUTORIALS base de données vers un fichier dans le /tmp répertoire, utilisez une commande comme indiqué ci-dessous.

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp tutorials tutorials_tbl
password ******

Exportation du contenu ou des définitions de table au format SQL

Pour exporter une table au format SQL vers un fichier, utilisez la commande ci-dessous.

$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******

Cela créera un fichier ayant le contenu indiqué ci-dessous.

-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `tutorials_tbl`
--

CREATE TABLE tutorials_tbl (
   tutorial_id int(11) NOT NULL auto_increment,
   tutorial_title varchar(100) NOT NULL default '',
   tutorial_author varchar(40) NOT NULL default '',
   submission_date date default NULL,
   PRIMARY KEY  (tutorial_id),
   UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;

--
-- Dumping data for table `tutorials_tbl`
--

INSERT INTO tutorials_tbl 
   VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

Pour vider plusieurs tables, nommez-les toutes suivies de l'argument de nom de base de données. Pour vider une base de données entière, ne nommez aucune table après la base de données comme indiqué dans le bloc de code suivant.

$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******

Pour sauvegarder toutes les bases de données disponibles sur votre hôte, utilisez le code suivant.

$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

L'option --all-databases est disponible dans la version MySQL 3.23.12. Cette méthode peut être utilisée pour implémenter une stratégie de sauvegarde de base de données.

Copie de tables ou de bases de données sur un autre hôte

Si vous souhaitez copier des tables ou des bases de données d'un serveur MySQL vers un autre, utilisez le mysqldump avec le nom de la base de données et le nom de la table.

Exécutez la commande suivante sur l'hôte source. Cela videra la base de données complète dansdump.txt fichier.

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

Vous pouvez copier une base de données complète sans utiliser un nom de table particulier comme expliqué ci-dessus.

Maintenant, ftp dump.txt sur un autre hôte et utilisez la commande suivante. Avant d'exécuter cette commande, assurez-vous d'avoir créé nom_base_de_données sur le serveur de destination.

$ mysql -u root -p database_name < dump.txt
password *****

Une autre façon d'accomplir cela sans utiliser de fichier intermédiaire est d'envoyer la sortie de mysqldump directement sur le réseau au serveur MySQL distant. Si vous pouvez vous connecter aux deux serveurs à partir de l'hôte sur lequel réside la base de données source, utilisez la commande suivante (assurez-vous que vous avez accès aux deux serveurs).

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

Dans mysqldump, la moitié de la commande se connecte au serveur local et écrit la sortie de vidage dans le tube. La moitié restante de la commande se connecte au serveur MySQL distant sur other-host.com. Il lit le tube d'entrée et envoie chaque instruction au serveur other-host.com.