файл не найден после экспорта в MySQL - PullRequest
8 голосов
/ 26 января 2012

Мне нужно экспортировать данные из таблицы в CSV.у меня есть следующая структура (не совсем моя таблица, но для демонстрационных целей)

CREATE TABLE `mytable` (
  `id` int(11) DEFAULT NULL,
  `mycolumn` varchar(25) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

с данными (около 3000 записей).теперь я хочу экспортировать некоторые из этих записей (из скрипта, который я запускаю через cronjob)

SELECT * INTO OUTFILE '/tmp/mytable.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable;

он показывает:

Query OK, 3 rows affected (0.00 sec)

, тогда я делаю:

ls: cannot access /tmp/mytable.sql: No such file or directory

где мой файл?

1 Ответ

8 голосов
/ 26 января 2012

Когда вы используете команду INTO OUTFILE, она экспортирует данные в локальную папку сервера, а не в тот, где вы выполняете запрос.

Пример: вы находитесь на своем компьютере (ip: 192.168.0.100) и подключаетесь к mysqlserver (ip: 192.168.0.101) с помощью команды mysql: mysql -uuser -h192.168.0.101 -A database.При выполнении SELECT * INTO OUTFILE файл сохраняется на mysqlserver (ip: 192.168.0.101) и НЕ на вашем компьютере (ip: 192.168.0.100).

Теперь вы можете использовать скрипт, который создает CSVфайл (в вашем cronjob - вы выбираете все данные, генерируете файл и отправляете через scp на другой сервер).

Или - вы также можете смонтировать NFS на /shared/, и когда вы создадите файл автоматически, он будет у другого сервера.

Или - вы можете просто запустить команду mysql в bashтакой скрипт с вашего первого сервера.

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv

источник: http://tlug.dnho.net/node/209

...