Записывать результаты запроса sql в файл в mysql

Я пытаюсь записать результаты запроса в файл с помощью mysql. Я видел некоторую информацию о конструкции outfile в нескольких местах, но кажется, что это только записывает файл на машину, на которой работает MySQL (в данном случае удаленная машина, т.е. База данных не находится на моей локальной машине).

В качестве альтернативы я также попытался запустить запрос и захватить (скопировать/вставить) результаты из окна результатов workbench mysql. Это работало для некоторых из меньших наборов данных, но самый большой из наборов данных кажется слишком большим и вызывает исключение из памяти/ошибка/сбой.

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы

Ответ 1

Вы можете попытаться выполнить запрос из вашего локального клиента и перенаправить вывод в локальный файл назначения;

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

Ответ 2

Это зависит от клиента SQL, который вы используете для взаимодействия с базой данных. Например, вы можете использовать интерфейс командной строки mysql в сочетании с оператором "tee" для вывода в локальный файл:

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

tee [file_name], \T [file_name] 

Выполните команду выше перед выполнением SQL, и результат запроса будет выведен в файл.

В частности, для MySQL Workbench, здесь статья о Выполнить запрос для вывода текста. Хотя я не вижу никакой документации, есть указания, что в Query также должна быть опция "Экспорт", хотя это почти наверняка зависит от версии.

Ответ 3

Вы можете попробовать это, если хотите записать результат запроса MySQL в файл.

В этом примере напишите результат запроса MySQL в файл csv с разделенным запятой форматом

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

Ответ 4

Если вы запускаете запросы mysql в командной строке. Здесь, я полагаю, у вас есть список запросов в текстовом файле, и вы хотите получить его в другом текстовом файле. Тогда вы можете использовать это. [test_2 - имя базы данных]

КОМАНДА 1

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

Где -vv для подробного вывода.

Если вы используете вышеуказанный оператор как

КОМАНДА 2

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

Он перенаправит STDERR в обычное место (т.е. на терминал) и STDOUT в выходной файл, который в моем случае будет result.txt

Первая команда выполняет query.txt, пока не сталкивается с ошибкой и останавливается там.

Как работает перенаправление. Вы можете попробовать

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

Здесь файл key.pm существует, а asdf не существует. Поэтому, когда вы катали файлы, вы получаете следующие

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

Но если вы измените предыдущую инструкцию с помощью этого

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

Затем вы получаете обе ошибки и вывод в output_2

cat /tmp/output_2

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