Domanda

Non riesco a ottenere il seguente codice per generare alcun output. L'utente MySQL ha " tutto " livello di concessione, / tmp è scrivibile, la query restituisce un set di risultati.

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

Dovrei vedere un output diverso da MySQL in caso di errore?

Posso verificare il risultato oltre " 1 riga interessata " ;?

È stato utile?

Soluzione

I file generati dalla clausola outfile vengono creati sull'host del server mysql. Assicurati di cercare l'host del server mysql poiché sembra che tu sia nell'host client che molto probabilmente non è l'host del server mysql.

Vedi http://dev.mysql.com/doc/refman /5.0/it/select.html nella sezione relativa al file di documentazione per questo.

Altri suggerimenti

Mi sono imbattuto in questo problema in Fedora 17 ed è stato causato da systemd. Penso che sia bello condividere.

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

Il colpevole era in /usr/lib/systemd/system/mysqld.service.

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

Grazie a questo blog , ho trovato la chiave.

Sembra che potresti avere un problema con le autorizzazioni dei file. Assicurati che l'utente: il gruppo in cui è in esecuzione mysqld disponga dell'autorizzazione adaqute per scrivere in /tmp/test.csv

Esistono svariati tipi di autorizzazioni per il demone / file server che potrebbero risolvere il problema. Presumibilmente basato su UNIX, potresti: chgrp mysqldGROUP / tmp

Ma questo sembra così facile: il tuo server è configurato in un certo modo, quindi ti adatti a quello. Il processo mysqld dovrebbe davvero essere in grado di leggere / scrivere solo da una manciata di posti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top