Вопрос

Я не могу получить следующий код для генерации вывода. Пользователь MySQL имеет " все " уровень предоставления, / 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 строка"?

Это было полезно?

Решение

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

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

Другие советы

Я столкнулся с этой проблемой в 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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top