Seltsame Probleme mit MySQL Outfile unter FreeBSD
-
24-10-2019 - |
Frage
(Siehe meine Antwort unten. Lassen Sie dies für den Fall, dass es jemand anderem hilft.)
Was folgt, ist eine Reihe von Versuchen, eine Abfrage in ein Outfile in einem neuen FreeBSD -Box zu werfen, auf den meine Website bewegt ist. Die Ergebnisse sind gleich, wenn ich mich als ich anmelde oder wenn ich mich als Root anmelde. Ich hoffe, der Stil ist nicht zu nervig. Ich habe meine Kommentare um den tatsächlichen Code und die tatsächliche Ausgabe kommentiert.
// Versuche, Abfragen in mein Zuhause zu werfen
SELECT pmr.datetime_requested,
nfo.postal_code
FROM
print_mailing_request pmr,
personal_info nfo
WHERE
nfo.person = pmr.person AND
pmr.datetime_requested >= "2010-01-01 00:00:00" AND
(pmr.print_mailing = 31 OR pmr.print_mailing = 30)
ORDER BY pmr.datetime_requested INTO OUTFILE '/usr/home/david/x';
ERROR 1 (HY000): Can't create/write to file '/usr/home/david/x' (Errcode: 2)
// versuchte zuerst die Datei zu erstellen mit touch und sogar chmod 077 Datei //, aber der gleiche Fehler jedes Mal
// ok, lasst es uns versuchen /tmp
SELECT pmr.datetime_requested,
nfo.postal_code
FROM
print_mailing_request pmr,
personal_info nfo
WHERE
nfo.person = pmr.person AND
pmr.datetime_requested >= "2010-01-01 00:00:00" AND
(pmr.print_mailing = 31 OR pmr.print_mailing = 30)
ORDER BY pmr.datetime_requested INTO OUTFILE '/tmp/x';
Query OK, 24654 rows affected (0.78 sec)
// Schauen wir uns die Datei an
less /tmp/x
/tmp/x: No such file or directory
// Melden Sie sich in MySQL zurück und versuchen Sie es erneut mit derselben Abfrage
ERROR 1086 (HY000): File '/tmp/x' already exists
ls /tmp
20100325180233.gtg2010.csv 20100330094652.gtg2010.csv
20100325180448.gtg2010.csv 2010_Q1_UNO.csv
20100325181446.gtg2010.csv 4724.csv
20100325181927.gtg2010.csv aprbUfvxp
20100326003002.gtg2010.csv dave.txt
20100327003002.gtg2010.csv etr.xml
20100328003002.gtg2010.csv mysql.sock
20100329003003.gtg2010.csv
// keine Datei x.
// Wenn ich Abfrage ohne Outfile ausführe, sehe ich 24000 Zeilen von
| 2010-04-04 13:27:09 | 33156 |
| 2010-04-04 13:27:10 | 33156 |
| 2010-04-04 13:30:04 | NE38 8SR |
| 2010-04-04 14:27:03 | 00901 |
| 2010-04-04 14:37:04 | 75001 |
| 2010-04-04 14:53:05 | 78640 |
| 2010-04-04 15:15:03 | 07410 |
| 2010-04-04 15:27:04 | 43235 |
// Ich weiß also, dass es nicht die Abfrage ist ...
// Rat?
Lösung
Doh! Wenn ich mich in MySQL auf diesem Computer anmelde, enthält meine Verbindungszeichenfolge eine IP -Adresse. /TMP, was MySQL betrifft, ist nicht auf der Maschine, in die ich angemeldet bin ...
Also habe ich das Problem durch Verwendung gelöst mysql -e
z.B:
mysql -h my.db.com -u usrname--password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt