Выбор 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
[[email protected] ~]# cat /tmp/test.csv
cat: /tmp/test.csv: No such file or directory

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

Благодаря этому блогу я нашел ключ.

Ответ 3

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

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

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