Frage

Ich kann den folgenden Code erhält eine Ausgabe zu erzeugen. Der MySQL-Benutzer hat „alle“ grant Ebene / tmp beschreibbar ist, die Abfrage eine Ergebnisse zurückgibt gesetzt.

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

Soll ich unterschiedliche Ausgabe von MySQL im Fall des Scheiterns sehen?

Kann ich das Ergebnis weiter als „1 Zeile betroffen“?

überprüfen
War es hilfreich?

Lösung

Die Dateien erzeugen durch die outfile-Klausel auf der MySQL-Server-Host erstellt. Bitte stellen Sie sicher, dass Sie auf dem MySQL-Server-Host suchen, wie es scheint, dass Sie auf dem Client-Rechner sind, die höchstwahrscheinlich nicht der MySQL-Server-Host ist.

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

Andere Tipps

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

Durch diesen Blog ich den Schlüssel gefunden.

Klingt wie Sie in einem Dateiberechtigungen Problem ausgeführt werden könnten. Achten Sie darauf, dass der Benutzer: Gruppe, die unter mysqld läuft adaqute Erlaubnis /tmp/test.csv zu schreiben hat

Es gibt eine ganze Reihe von Server-Daemon / Dateiberechtigungen Aromen, die das Problem lösen würde. Vermutlich UNIX-basierte, können Sie: chgrp mysqldGROUP / tmp

Aber das macht es scheint so Easy- Ihr Server in einer bestimmten Art und Weise konfiguriert ist, so dass Sie, dass anzupassen. Der mysqld-Prozess sollte wirklich nur in der Lage sein, von einer Handvoll von Orten zu lesen / schreiben.

scroll top