MySQL seleziona in outfile / tmp nessun output
-
10-07-2019 - |
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 " ;?
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.