93 votes

Sauvegarde une base de données mysql vers une sauvegarde en texte brut (CSV) à partir de la ligne de commande

J'aimerais éviter mysqldump car cela se présente sous une forme qui n'est lisible que par mysql. Le format CSV semble plus universel (un fichier par table suffit). Mais s'il y a des avantages à mysqldump, je suis tout ouïe. En outre, je voudrais quelque chose que je peux exécuter à partir de la ligne de commande (linux). Si c'est un script mysql, il serait utile de savoir comment créer une telle chose.

142voto

Alnitak Points 143355

Si vous pouvez faire face à la table-à-un-temps, et vos données ne sont pas binaires, utilisez l' -B option à l' mysql commande. Avec cette option, il va générer TSV (séparées par des tabulations) des fichiers qui peuvent importer dans Excel, etc, assez facilement:

% echo 'SELECT * FROM table' | mysql -B -uxxx -pyyy database

Alternativement, si vous avez un accès direct au système de fichiers du serveur, utilisez SELECT INTO OUTFILE ce qui peut générer de vrais fichiers CSV:

SELECT * INTO OUTFILE 'table.csv'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
FROM table

32voto

Paul Tomblin Points 83687

Dans MySQL, vous pouvez spécifier une sortie CSV comme suit:

 SELECT order_id,product_name,qty
FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
 

De http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/

26voto

chmac Points 797

Vous pouvez vider une base de données entière en une fois avec l'option --tab de mysqldump. Vous fournissez un chemin de répertoire et il crée un fichier .sql avec la syntaxe CREATE TABLE DROP IF EXISTS et un fichier .txt avec le contenu, séparés par des tabulations. Pour créer des fichiers séparés par des virgules, vous pouvez utiliser les éléments suivants:

 mysqldump --password  --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name
 

Ce chemin doit être accessible en écriture à la fois à l'utilisateur mysql et à l'utilisateur exécutant la commande. C'est pourquoi, par souci de simplicité, je recommande d'abord chmod 777 /tmp/path_to_dump/ .

18voto

Sri Points 173

L'option select into outfile ne fonctionnerait pas pour moi, mais le moyen de contournement ci-dessous de fichier de tuyauterie délimité par des tabulations via SED:

 mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv
 

3voto

Zoredache Points 8873

Si vous avez vraiment besoin d'un "de Sauvegarde", puis vous avez aussi besoin de schéma de base de données, comme les définitions de table, à la vue des définitions, des procédures de la banque et ainsi de suite. Une sauvegarde d'une base de données n'est pas seulement les données.

La valeur de la commande mysqldump format de sauvegarde est précisément qu'il est très FACILE de l'utiliser pour restaurer les bases de données mysql. Une sauvegarde qui n'est pas facilement restauré est beaucoup moins utile. Si vous êtes à la recherche d'une méthode fiable de sauvegarde de données mysql de sorte que vous pouvez restaurer à un serveur mysql alors je pense que vous devriez coller avec l'outil mysqldump.

Mysql est gratuit et fonctionne sur de nombreuses plates-formes différentes. La configuration d'un nouveau serveur mysql que je peux le restaurer pour est simple. Je ne suis pas du tout inquiet de ne pas être en mesure de configuration de mysql, donc je peux faire une restauration.

Je serais beaucoup plus inquiet à propos d'une coutume de sauvegarde/restauration basée sur une fragile format csv/tsv défaut. Êtes-vous sûr que toutes vos citations, des virgules ou des tabulations qui sont dans vos données, serait d'obtenir échappé correctement et puis analysé correctement par votre outil de restauration?

Si vous êtes à la recherche d'une méthode pour extraire les données, puis voir plusieurs autres réponses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X