MySQL / 10. Импорт и экспорт данных

Экспорт таблиц в виде необработанных данных

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

Решение
Воспользуйтесь программой mysqldump с опцией --tab.

Обсуждение
Программа mysqldump применяется для копирования, в том числе резервного, таблиц и баз данных. Она может выгрузить таблицу как «сырой» файл и как набор предложений INSERT, пересоздающих записи таблицы. Первый способ обсуждается здесь, а второй – в рецептах 10.15 и 10.16.

Для создания дампа таблицы вы должны указать опцию -tab и определить в ней каталог, в который сервер MySQL поместит файл. (Каталог должен существовать, MySQL не станет его создавать.) Например, для создания дампа таблицы states из базы данных cookbook в каталоге /tmp можно выполнить такую команду:

% mysqldump --no-create-info --tab=/tmp cookbook states

Программа mysqldump создает файл с именем, совпадающим с именем таблицы, и добавляет к нему суффикс .txt, так что в приведенном примере будет создан файл с именем /tmp/states.txt. Такая форма mysqldump в некотором смысле является эквивалентом предложения SELECT ... INTO OUTFILE для командной строки. В частности, команда создает файл на серверном хосте, и для доступа к нему необходима привилегия FILE.

Если не указывать опцию --no-create-info, то mysqldump также создаст файл /tmp/states.sql, в котором будет присутствовать предложение CREATE TABLE, создающее данную таблицу. (Владельцем последнего файла, в отличие от файла данных, будете вы, а не сервер.)

После имени базы данных можно указать несколько имен таблиц, в этом случае mysqldump создаст файлы для каждой из них. Если не указать ни одной таблицы, mysqldump создаст дампы всех таблиц базы данных.

Программа mysqldump по умолчанию создает файлы данных с символами табуляции и конца строки в качестве разделителей полей и строк. Для управления форматом вывода используйте опции --fields-enclosed-by, --fields-terminated-by и --lines-terminated-by (то есть те же спецификаторы формата, что и в программе mysqlimport). Например, для экспорта таблицы states в формате CSV с разделителями строк CRLF можно выполнить такую команду:

% mysqldump --no-create-info --tab=/tmp \--fields-enclosed-by="\"" --fields-terminated-by="," \
--lines-terminated-by="\r\n" cookbook states

Созданный таким образом файл данных можно импортировать как предложением LOAD DATA, так и утилитой mysqlimport. Проверяйте соответствие спецификаторов формата, если при экспорте не используется формат по умолчанию.

Статьи по MySQL на эту тему:

Диагностическая утилита для LOAD DATA
Извлечение и перестановка столбцов файлов данных
Импорт XML в MySQL
Использование временных таблиц для преобразования дат
Использование дат с недостающими частями

Вернуться в раздел: MySQL / 10. Импорт и экспорт данных