03.02.2014 10:55
Mtirt
 
Цитата:
Экспорт результатов запроса из MySQL

Задача
Вы хотите экспортировать результаты запроса из MySQL в файл или в другую программу.

Решение
Воспользуйтесь предложением SELECT ... INTO OUTFILE или перенаправьте вывод программы mysql.

Обсуждение
В MySQL можно использовать предложение SELECT ... INTO OUTFILE для вывода результатов запроса непосредственно в файл на хосте сервера. Если же вы хотите получить результат на клиентском хосте, то есть другая возможность:

перенаправить вывод программы mysql. У каждого из этих методов есть свои сильные и слабые стороны, поэтому вам следует познакомиться с обоими и использовать тот, который больше подходит в конкретной ситуации.

Экспорт с помощью SELECT ... INTO OUTFILE

Здесь используется обычное предложение SELECT, к которому добавлена конструкция INTO OUTFILE имя_файла. Формат вывода по умолчанию тот же, что и для LOAD DATA, так что следующее предложение экспортирует таблицу passwd в файл /tmp/passwd.txt с символами TAB и LF в качестве разделителей полей и строк:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/passwd.txt';

Для изменения формата вывода вы можете использовать опции, аналогичные тем, которые использовались в LOAD DATA для определения кавычек и разделителей столбцов и строк. Чтобы экспортировать таблицу passwd в формате CSV с разделением строк символами CRLF, используйте такое предложение:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/passwd.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';

Предложение SELECT ... INTO OUTFILE обладает следующими свойствами:

• Выходной файл создается непосредственно сервером MySQL, поэтому имя файла должно соответствовать его желаемому расположению на серверном хосте. Не существует локальной версии этого предложения, аналогичной LOAD DATA LOCAL.

• Для выполнения предложения SELECT ... INTO необходима привилегия FILE в MySQL.

• Нельзя использовать уже существующий файл. Это предохраняет от потери файлов, возможно, содержащих важную информацию.

• Вам потребуется учетная запись на сервере или другой способ для получения файла с этого хоста. Иначе предложение SELECT ... INTO OUTFILE окажется для вас бесполезным.

• В UNIX файл создается доступным для чтения всем, а его владельцем является сервер MySQL. Это означает, что, хотя вы и сможете прочитать его, у вас может не оказаться прав на его удаление.

Экспорт с помощью клиента mysql
Вследствие того, что предложение SELECT ... INTO OUTFILE записывает файл на хост сервера, вы не сможете использовать его, если у вашей учетной записи в MySQL нет привилегии FILE. Для экспорта данных в локальный файлтребуется другой подход. Если все, что вам нужно – это вывод данных, разделенных символами табуляции, можно воспользоваться «экспортом для бедных», выполняя предложение SELECT из программы mysql с перенаправленным в файл выводом. При таком способе вам не потребуется привилегия FILE для вывода результата запроса в файл. Вот пример, в котором экспортируются столбцы регистрационного имени и командного интерпретатора из ранее созданной таблицы passwd:

% mysql -e "SELECT account, shell FROM passwd" -N cookbook > shells.txt

Опция -e определяет выполняемый запрос, а -N сообщает MySQL, что не надо выводить строку заголовков столбцов, обычно предваряющую вывод.

Вторая опция была добавлена в MySQL 3.22.20; если у вас более старая версия, вы можете получить тот же результат, указав вместо нее опцию -ss, заставляющую mysql помолчать»:

% mysql -e "SELECT account, shell FROM passwd" -ss cookbook > shells.txt

Имейте в виду, что значения NULL выводятся в виде строки «NULL». Возможно, потребуется выполнить некоторые преобразования в зависимости от того, как вы планируете использовать результат.

Перенаправив вывод результатов запроса в фильтр, заменяющий символы табуляции на другие разделители, можно получить выходные данные в формате, отличном от принятого по умолчанию. Например, чтобы использовать в качестве разделителя решетку, преобразуем символы TAB в # (строка TAB указывает то место в команде, где следует нажать клавишу табуляции):

% mysql -N -e "здесь ваш запрос" имя_БД | sed -e "s/TAB/#/g" > файл_вывода Для этих целей можно также использовать команду tr, хотя ее синтаксис может отличаться в разных реализациях. В системах Mac OS X или RedHat Linux команда выглядит так:

% mysql -N -e "здесь ваш запрос" имя_БД | tr "\t" "#" > файл_вывода

В приведенных командах mysql используются опции -N или -ss для удаления из выходных данных заголовков столбцов. В некоторых случаях эти заголовки могут пригодиться. (Например, они могут понадобиться при последующем импорте.) Тогда исключите из команды опцию их отмены. В этом смысле экспорт результатов запроса посредством mysql более гибок, чем с помощью предложения SELECT ... INTO OUTFILE, так как в последнем отсутствует возможность вывода заголовков столбцов.
03.02.2014 11:01
Dim
 
воспользовался перенаправлением вывода в файл
Часовой пояс GMT +3, время: 08:48.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.