web-dev-qa-db-fra.com

écrire les résultats d'une requête sql dans un fichier dans mysql

J'essaie d'écrire les résultats d'une requête dans un fichier en utilisant mysql. J'ai vu quelques informations sur la construction outfile à quelques endroits, mais il semble que cela n'écrit que le fichier sur la machine sur laquelle MySQL s'exécute (dans ce cas, une machine distante, c'est-à-dire que la base de données n'est pas sur ma machine locale).

Alternativement, j'ai également essayé d'exécuter la requête et de récupérer (copier/coller) les résultats à partir de la fenêtre de résultats de MySQL Workbench. Cela a fonctionné pour certains des plus petits ensembles de données, mais le plus grand des ensembles de données semble être trop volumineux et provoquer une exception/bogue/plantage de mémoire insuffisante.

Toute aide à ce sujet serait grandement appréciée.

27
Ramy

Vous pouvez essayer d'exécuter la requête à partir de votre cli local et rediriger la sortie vers une destination de fichier local;

mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
45
eroomydna

Cela dépend du client SQL que vous utilisez pour interagir avec la base de données. Par exemple, vous pouvez utiliser l'interface de ligne de commande mysql en conjonction avec l'opérateur "tee" pour sortir dans un fichier local:

http://dev.mysql.com/doc/refman/5.1/en/mysql-commands.html

tee [file_name], \T [file_name] 

Exécutez la commande ci-dessus avant d'exécuter le SQL et le résultat de la requête sera sorti dans le fichier.

Spécifiquement pour MySQL Workbench, voici un article sur Execute Query to Text Output . Bien que je ne vois aucune documentation, il y a des indications qu'il devrait également y avoir une option "Exporter" sous Query, bien que cela soit presque certainement dépendant de la version.

14
dolphy

Vous pouvez essayer ceci, si vous voulez écrire le résultat de la requête MySQL dans un fichier.

Cet exemple écrit le résultat de la requête MySQL dans un fichier csv avec un format séparé par des virgules

SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
9
geekdev

Si vous exécutez des requêtes mysql sur la ligne de commande. Ici, je suppose que vous avez la liste des requêtes dans un fichier texte et que vous voulez la sortie dans un autre fichier texte. Ensuite, vous pouvez l'utiliser. [test_2 est le nom de la base de données]

COMMAND 1

mysql -vv -u root -p test_2  < query.txt >  /root/results.txt 2>&1

Où -vv correspond à la sortie détaillée.

Si vous utilisez la déclaration ci-dessus comme

COMMANDE 2

mysql -vv -u root -p test_2  < query.txt  2>&1 >  /root/results.txt

Il redirigera STDERR vers un emplacement normal (c'est-à-dire sur le terminal) et STDOUT vers le fichier de sortie qui dans mon cas est results.txt

La première commande exécute le fichier query.txt jusqu'à ce qu'il soit confronté à une erreur et s'arrête là.

Voilà comment fonctionne la redirection. Tu peux essayer

#ls key.pem asdf > /tmp/output_1 2>&1 /tmp/output_2

Ici, le fichier key.pm existe et asdf n'existe pas. Ainsi, lorsque vous récupérez les fichiers, vous obtenez ce qui suit

# cat /tmp/output_1
key.pem
#cat /tmp/output_2
ls: cannot access asdf: No such file or directory

Mais si vous modifiez l'instruction précédente avec ce

ls key.pem asdf > /tmp/output_1 > /tmp/output_2 2>&1

Ensuite, vous obtenez à la fois l'erreur et la sortie dans output_2

cat /tmp/output_2

ls: cannot access asdf: No such file or directory
key.pem
2
Himanshu Chauhan