записать результаты SQL-запроса в файл в MySQL - PullRequest
24 голосов
/ 13 июня 2011

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

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

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

Ответы [ 4 ]

44 голосов
/ 13 июня 2011

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

Mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
13 голосов
/ 13 июня 2011

Это зависит от клиента 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 также должна быть опция «Экспорт», хотя это почти наверняка зависит от версии.

9 голосов
/ 24 июля 2015

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

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

SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
2 голосов
/ 25 ноября 2016

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

COMMAND 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 в выходной файл, который в моем случае будет results.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...