MySQL выбрать в выходной файл / TMP нет вывода - PullRequest
15 голосов
/ 24 июня 2009

Я не могу получить следующий код для генерации какого-либо вывода. Пользователь MySQL имеет уровень предоставления «all», / tmp доступен для записи, запрос возвращает набор результатов.

mysql> SELECT field FROM test_table WHERE condition='test'
    -> INTO OUTFILE '/tmp/test.csv'
    -> FIELDS TERMINATED BY ','
    -> ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n';
Query OK, 1 row affected (0.00 sec)

mysql>
[1]+  Stopped                 mysql
[root@web1 ~]# cat /tmp/test.csv
cat: /tmp/test.csv: No such file or directory

Должен ли я видеть другой вывод из MySQL в случае сбоя?

Могу ли я проверить результат дальше, чем "затронут 1 строка"?

Ответы [ 3 ]

18 голосов
/ 24 июня 2009

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

См. http://dev.mysql.com/doc/refman/5.0/en/select.html в разделе об outfile для документации по этому вопросу.

12 голосов
/ 09 июля 2013

Я столкнулся с этой проблемой в Fedora 17, и она была вызвана systemd. Я думаю, что это хорошо, чтобы поделиться.

mysql> select * into outfile '/tmp/z1' from t1;
Query OK, 673 rows affected (0.01 sec)
mysql> select * into outfile '/tmp/z2' from t1;
Query OK, 673 rows affected (0.01 sec)
mysql> select * into outfile '/tmp/z1' from t1;
ERROR 1086 (HY000): File '/tmp/z1' already exists
mysql> Bye

# cat /tmp/z1
cat: /tmp/z1: No such file or directory
# ls -d systemd-*
/tmp/systemd-private-AQEueG
/tmp/systemd-private-AuCNDY
/tmp/systemd-private-TOMNxZ
/tmp/systemd-private-UacrpE
/tmp/systemd-private-yal7lQ
/tmp/systemd-private-ZlRJeN
# ls /tmp/systemd-private-TOMNxZ
z1  z2

Виновный был в /usr/lib/systemd/system/mysqld.service.

# Place temp files in a secure directory, not /tmp
PrivateTmp=true

Благодаря этому блогу я нашел подсказку.

0 голосов
/ 12 ноября 2010

Звучит так, как будто вы столкнулись с проблемой прав доступа к файлам. Убедитесь, что пользователь: группа, в которой работает mysqld, имеет разрешение на запись в /tmp/test.csv

.

Существует целый ряд разновидностей серверных демонов / разрешений для файлов, которые могут решить эту проблему. Предположительно на основе UNIX вы могли бы: chgrp mysqldGROUP / tmp

Но это кажется таким простым: ваш сервер настроен определенным образом, так что вы приспосабливаетесь к этому. Процесс mysqld должен действительно иметь возможность читать / писать только из нескольких мест.

...