Самый простой способ экспорта табличных данных в текстовый файл — использование оператора SELECT … INTO OUTFILE, который экспортирует результат запроса непосредственно в файл на хосте сервера.
Экспорт данных с помощью оператора SELECT … INTO OUTFILE
Синтаксис этого оператора объединяет обычную команду SELECT с именем файла INTO OUTFILE в конце. Формат вывода по умолчанию такой же, как и для команды LOAD DATA. Итак, следующий оператор экспортирует таблицу tutorials_tbl в /tmp/tutorials.txt в виде файла с разделителями табуляцией и строкой, заканчивающейся строкой .
mysql> SELECT * FROM tutorials_tbl -> INTO OUTFILE '/tmp/tutorials.txt';
Вы можете изменить формат вывода, используя различные параметры, чтобы указать, как заключать в кавычки и разделять столбцы и записи. Чтобы экспортировать таблицу tutorial_tbl в формате CSV со строками, оканчивающимися CRLF, используйте следующий код.
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt' -> FIELDS TERMINATED BY ',' ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n';
SELECT … INTO OUTFILE имеет следующие свойства —
-
Выходной файл создается непосредственно сервером MySQL, поэтому имя файла должно указывать, куда вы хотите записать файл на хост сервера. ЛОКАЛЬНОЙ версии оператора, аналогичной ЛОКАЛЬНОЙ версии LOAD DATA, не существует .
-
У вас должна быть привилегия MySQL FILE для выполнения инструкции SELECT … INTO .
-
Выходной файл не должен уже существовать. Это препятствует тому, чтобы MySQL забивал файлы, которые могут быть важны.
-
У вас должна быть учетная запись на хосте сервера или какой-то другой способ получить файл с этого хоста. В противном случае команда SELECT … INTO OUTFILE , скорее всего, не будет иметь для вас никакого значения.
-
В UNIX файл создается для чтения всем миром и принадлежит серверу MySQL. Это означает, что, хотя вы сможете прочитать файл, вы не сможете удалить его.
Выходной файл создается непосредственно сервером MySQL, поэтому имя файла должно указывать, куда вы хотите записать файл на хост сервера. ЛОКАЛЬНОЙ версии оператора, аналогичной ЛОКАЛЬНОЙ версии LOAD DATA, не существует .
У вас должна быть привилегия MySQL FILE для выполнения инструкции SELECT … INTO .
Выходной файл не должен уже существовать. Это препятствует тому, чтобы MySQL забивал файлы, которые могут быть важны.
У вас должна быть учетная запись на хосте сервера или какой-то другой способ получить файл с этого хоста. В противном случае команда SELECT … INTO OUTFILE , скорее всего, не будет иметь для вас никакого значения.
В UNIX файл создается для чтения всем миром и принадлежит серверу MySQL. Это означает, что, хотя вы сможете прочитать файл, вы не сможете удалить его.
Экспорт таблиц в виде необработанных данных
Программа mysqldump используется для копирования или резервного копирования таблиц и баз данных. Он может записывать вывод таблицы в виде необработанного файла данных или в виде набора операторов INSERT, которые воссоздают записи в таблице.
Чтобы вывести таблицу в виде файла данных, вы должны указать опцию —tab, которая указывает каталог, в который вы хотите, чтобы сервер MySQL записал файл.
Например, чтобы выгрузить таблицу tutorials_tbl из базы данных TUTORIALS в файл в каталоге / tmp , используйте команду, как показано ниже.
$ mysqldump -u root -p --no-create-info \ --tab=/tmp tutorials tutorials_tbl password ******
Экспорт содержимого таблицы или определений в формате SQL
Чтобы экспортировать таблицу в формате SQL в файл, используйте команду, показанную ниже.
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt password ******
Это создаст файл с содержимым, как показано ниже.
-- MySQL dump 8.23 -- -- Host: localhost Database: TUTORIALS --------------------------------------------------------- -- Server version 3.23.58 -- -- Table structure for table `tutorials_tbl` -- CREATE TABLE tutorials_tbl ( tutorial_id int(11) NOT NULL auto_increment, tutorial_title varchar(100) NOT NULL default '', tutorial_author varchar(40) NOT NULL default '', submission_date date default NULL, PRIMARY KEY (tutorial_id), UNIQUE KEY AUTHOR_INDEX (tutorial_author) ) TYPE = MyISAM; -- -- Dumping data for table `tutorials_tbl` -- INSERT INTO tutorials_tbl VALUES (1,'Learn PHP','John Poul','2007-05-24'); INSERT INTO tutorials_tbl VALUES (2,'Learn MySQL','Abdul S','2007-05-24'); INSERT INTO tutorials_tbl VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
Чтобы вывести несколько таблиц, назовите их все, а затем укажите аргумент имени базы данных. Чтобы создать дамп всей базы данных, не называйте никаких таблиц после базы данных, как показано в следующем блоке кода.
$ mysqldump -u root -p TUTORIALS > database_dump.txt password ******
Для резервного копирования всех баз данных, доступных на вашем хосте, используйте следующий код.
$ mysqldump -u root -p --all-databases > database_dump.txt password ******
Опция —all-database доступна в версии MySQL 3.23.12. Этот метод может быть использован для реализации стратегии резервного копирования базы данных.
Копирование таблиц или баз данных на другой хост
Если вы хотите скопировать таблицы или базы данных с одного сервера MySQL на другой, используйте mysqldump с именем базы данных и именем таблицы.
Выполните следующую команду на исходном хосте. Это сбросит всю базу данных в файл dump.txt .
$ mysqldump -u root -p database_name table_name > dump.txt password *****
Вы можете скопировать всю базу данных без использования конкретного имени таблицы, как описано выше.
Теперь загрузите файл ftp dump.txt на другом хосте и используйте следующую команду. Перед выполнением этой команды убедитесь, что вы создали имя_базы_данных на конечном сервере.
$ mysql -u root -p database_name < dump.txt password *****
Другой способ сделать это без использования промежуточного файла — это отправить выходные данные mysqldump напрямую по сети на удаленный сервер MySQL. Если вы можете подключиться к обоим серверам с хоста, на котором находится исходная база данных, используйте следующую команду (убедитесь, что у вас есть доступ на обоих серверах).
$ mysqldump -u root -p database_name \ | mysql -h other-host.com database_name
В mysqldump половина команды подключается к локальному серверу и записывает вывод дампа в канал. Оставшаяся половина команды подключается к удаленному серверу MySQL на other-host.com. Он читает канал для ввода и отправляет каждое утверждение на сервер other-host.com.