mysql - segundo - optimizacion de consultas sql
escribir los resultados de la consulta sql a un archivo en mysql (4)
Estoy tratando de escribir los resultados de una consulta en un archivo usando mysql. He visto algo de información sobre la construcción outfile en algunos lugares pero parece que esto solo escribe el archivo en la máquina en la que se ejecuta MySQL (en este caso, una máquina remota, es decir, la base de datos no está en mi máquina local).
Alternativamente, también he intentado ejecutar la consulta y capturar (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 más grande de los conjuntos de datos parece ser demasiado grande y causa una excepción de memoria / error / bloqueo.
Cualquier ayuda en este asunto sería muy apreciada.
Esto depende del cliente SQL que esté utilizando para interactuar con la base de datos. Por ejemplo, podría usar la interfaz de línea de comandos mysql junto con el operador "tee" para enviar a un archivo local:
http://dev.mysql.com/doc/refman/5.1/en/mysql-commands.html
tee [file_name], /T [file_name]
Ejecute 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 sobre Execute Query to Text Output . Aunque no veo ninguna documentación, hay indicaciones de que también debería haber una opción "Exportar" en Consulta, aunque eso es casi seguro que depende de la versión.
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
Puede intentar esto, si desea escribir el resultado de la consulta MySQL en un archivo.
Este ejemplo escribe el resultado de la consulta MySQL en un archivo csv
con formato separado por comas
SELECT id,name,email FROM customers
INTO OUTFILE ''/tmp/customers.csv''
FIELDS TERMINATED BY '',''
ENCLOSED BY ''"''
LINES TERMINATED BY ''/n''
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 la base de datos]
Comando 1
mysql -vv -u root -p test_2 < query.txt > /root/results.txt 2>&1
Donde -vv es para la salida detallada.
Si utiliza la declaración anterior como
Comando 2
mysql -vv -u root -p test_2 < query.txt 2>&1 > /root/results.txt
Redirigirá STDERR a la ubicación normal (es decir, en el terminal) y STDOUT al archivo de salida, que en mi caso es results.txt
El primer comando ejecuta el archivo query.txt hasta que aparece un error y se detiene allí.
Así es como funciona la redirección. Puedes probar
#ls key.pem asdf > /tmp/output_1 2>&1 /tmp/output_2
Aquí el archivo key.pm existe y asdf no existe. Así que cuando catas los archivos obtienes lo 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
Entonces obtienes el error y la salida en output_2
cat /tmp/output_2
ls: cannot access asdf: No such file or directory
key.pem