MySQL выбирает в outfile / tmp нет вывода

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

3 ответов


файлы, генерируемые предложением 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 в/системы/тузды.услуга.

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

спасибо этот блог, я нашел ключ.


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

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

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