MySQL выбрать в выходной файл / TMP нет вывода
-
10-07-2019 - |
Вопрос
Я не могу получить следующий код для генерации вывода. Пользователь 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 должен действительно иметь возможность читать / писать только из нескольких мест. Р>