Ответ 1
Вы можете попытаться выполнить запрос из вашего локального клиента и перенаправить вывод в локальный файл назначения;
mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
Я пытаюсь записать результаты запроса в файл с помощью mysql. Я видел некоторую информацию о конструкции outfile в нескольких местах, но кажется, что это только записывает файл на машину, на которой работает MySQL (в данном случае удаленная машина, т.е. База данных не находится на моей локальной машине).
В качестве альтернативы я также попытался запустить запрос и захватить (скопировать/вставить) результаты из окна результатов workbench mysql. Это работало для некоторых из меньших наборов данных, но самый большой из наборов данных кажется слишком большим и вызывает исключение из памяти/ошибка/сбой.
Любая помощь по этому вопросу будет принята с благодарностью.
Вы можете попытаться выполнить запрос из вашего локального клиента и перенаправить вывод в локальный файл назначения;
mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
Это зависит от клиента 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 также должна быть опция "Экспорт", хотя это почти наверняка зависит от версии.
Вы можете попробовать это, если хотите записать результат запроса MySQL в файл.
В этом примере напишите результат запроса MySQL в файл csv
с разделенным запятой форматом
SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Если вы запускаете запросы 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