2009-06-24 10 views
13

Ich kann den folgenden Code nicht erhalten, um irgendeine Ausgabe zu erzeugen. Der MySQL-Benutzer hat die Berechtigungsebene "all",/tmp ist beschreibbar, die Abfrage gibt eine Ergebnismenge zurück.MySQL wählen in outfile/tmp keine Ausgabe

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 

Sollte ich im Falle eines Fehlers unterschiedliche Ausgabe von MySQL sehen?

Kann ich das Ergebnis weiter als "1 Zeile betroffen" verifizieren?

+0

Warum sollte eine select-Anweisung irgendetwas beeinflussen? – futureelite7

+0

Vermutlich bezieht es sich auf die Outfile-Funktion und nicht auf die Auswahl. – Andy

Antwort

17

Die Dateien, die von der outfile-Klausel generiert werden, werden auf dem Serverserver von mysql erstellt. Bitte stellen Sie sicher, dass Sie auf dem Server-Server suchen, da Sie sich auf dem Client-Host befinden, der höchstwahrscheinlich nicht der Server-Server ist.

Siehe Dokumentation http://dev.mysql.com/doc/refman/5.0/en/select.html im Abschnitt über outfile für diesbezügliche Dokumentation.

+0

Danke Dipin, du hast Recht, dass dies nicht der DB-Server ist. Vielen Dank – Andy

+0

Kein Problem. Froh, dass ich helfen konnte. Prost! – Dipin

+0

Dipin du rettest mir gerade die ganze Nacht den Kopf schlagend. Vielen Dank! – jerrygarciuh

0

Klingt, als ob Sie in ein Dateiberechtigungs-Problem geraten könnten. Stellen Sie sicher, dass der Benutzer: Gruppe, unter der mysqld läuft, über die entsprechende Berechtigung verfügt, um in /tmp/test.csv zu schreiben

Es gibt eine ganze Reihe von Server-Daemon/Dateiberechtigungen, die das Problem lösen würden. Vermutlich auf UNIX-Basis könnten Sie: chgrp mysqldGROUP/tmp

Aber das scheint so einfach zu sein - Ihr Server ist in einer bestimmten Weise konfiguriert, so dass Sie sich daran anpassen. Der mysqld-Prozess sollte wirklich nur in der Lage sein, von einer Handvoll von Orten zu lesen/schreiben.

10

Ich stieß auf dieses Problem in Fedora 17 und es wurde von Systemd verursacht. Ich denke, es ist gut zu teilen.

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 

Der Täter war in /usr/lib/systemd/system/mysqld.service.

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

Dank this blog fand ich den Hinweis.

+0

Danke für das Teilen – blissini