2011-06-13 15 views
15

Estoy tratando de escribir los resultados de una consulta en un archivo usando mysql. He visto información sobre la construcción del archivo saliente en algunos lugares, pero parece que esto solo escribe el archivo en la máquina en la que se está ejecutando MySQL (en este caso, una máquina remota, es decir, la base de datos no está en mi máquina local).escribir los resultados de la consulta sql en un archivo en mysql

Alternativamente, también he intentado ejecutar la consulta y tomar (copiar/pegar) los resultados de la ventana de resultados de mysql workbench. Esto funcionó para algunos de los conjuntos de datos más pequeños, pero el mayor de los conjuntos de datos parece ser demasiado grande y causa una excepción/error/falla de memoria insuficiente.

Cualquier ayuda sobre este tema sería muy apreciada.

+0

Si tiene acceso al servidor MySQL desde su máquina, debería poder descargar los resultados de una consulta a través de la línea de comando, en caso de que tenga uno utilizable. – miku

Respuesta

30

Puede intentar ejecutar la consulta desde su cli local y redirigir la salida a un destino de archivo local;

Mysql -user -pass -e"select cols from table where cols not null" > /tmp/output 
+2

¿Hay algún tipo de bandera que le proporcione la estructura ascii con eso? Como + --------- + etc –

+1

Debería hacerlo de forma predeterminada. Pasando el argumento -s debería eliminar el formato de la tabla. – eroomydna

+5

@BigMoney Tampoco lo hizo para mí en CentOS. Agregar '--table' o' -t' lo forzó a agregar la estructura + ----- + a través de – Matthew

11

Depende del cliente SQL que esté utilizando para interactuar con la base de datos. Por ejemplo, se puede utilizar la interfaz de línea de comandos de MySQL en conjunto con el operador "tee" de salida a un archivo local:

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

tee [file_name], \T [file_name] 

ejecutar el comando anterior antes de ejecutar el SQL y el resultado de la consulta se enviará al archivo.

Específicamente para MySQL Workbench, aquí hay un artículo en Execute Query to Text Output. Aunque no veo ninguna documentación, hay indicios de que también debe haber una opción de "Exportar" en la consulta, aunque es casi seguro que depende de la versión.

+0

no del todo seguro de seguir. ¿Esto va al final de una declaración sql? – Ramy

+2

No, tee es un comando que ejecutaría antes de ejecutar la instrucción. – sciurus

4

Puede intentar esto, si desea escribir el resultado de la consulta de MySQL en un archivo.

Este ejemplo escribir el resultado de la consulta MySQL en un archivo de formato de coma csv con

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

El problema es obtener la exportación a la máquina local. Esta consulta guarda el CSV en el mismo servidor que el host mySQL. – nightgaunt

+0

'muestra variables como 'datadir';' para ver [qué directorio] (https://stackoverflow.com/a/31558673/673991) ese archivo entrará. El usuario necesitará la [responsabilidad imponente] (https: // stackoverflow.com/a/39963216/673991) del privilegio 'GRANT FILE'. –

1

separados Si está ejecutando consultas mysql en la línea de comandos. Aquí supongo que tiene la lista de consultas en un archivo de texto y desea la salida en otro archivo de texto. Entonces puedes usar esto. [Test_2 es ​​el nombre de base de datos]

COMANDO 1

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

Dónde -vv es para la salida detallada.

Si se utiliza la sentencia anterior como

COMANDO 2

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

Será redirigir STDERR a la ubicación normal (es decir, en el terminal) y stdout al archivo de salida que en mi caso es resultados. txt

El primer comando ejecuta query.txt hasta que se enfrenta a un error y se detiene allí.

Así es como funciona la redirección. Puede probar

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

Aquí existe el archivo key.pm y asdf no existe.Así que cuando los archivos gato se obtiene el siguiente

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

Pero si modifica la declaración anterior con este

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

A continuación, obtener el tanto error y de salida en output_2

cat /tmp/output_2 

ls: cannot access asdf: No such file or directory 
key.pem 
Cuestiones relacionadas