MySQL wählen Sie in outfile / tmp keine Ausgabe
-
10-07-2019 - |
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üfenLö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.