mysqlimport gibt einen Fehler aus, wenn es als Cron-Job, aber nicht interaktiv ausgeführt wird (Ubuntu 14.02)

mysqlimport gibt einen Fehler aus, wenn es als Cron-Job, aber nicht interaktiv ausgeführt wird (Ubuntu 14.02)

Ich habe ein Bash-Skript, das eine CSV-Datei herunterlädt und dann in ein lokales MySQL importiert. Die Datenbank ist MySQL 5.6 auf Ubuntu 14.04. Ich lade Daten mit der folgenden Anweisung (Bash):

 mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --verbose --local --user=xx --password=xxxxxxxx mydb /var/www/mysite/data/daily_info.csv

Das Problem ist, dass das Skript, wenn ich es über die Befehlszeile mit demselben Benutzer starte, vom Download bis zur Importphase einwandfrei läuft. Ich habe einen Crontab-Eintrag hinzugefügt, um das Skript mit dem Befehl auszuführen

crontab -u theuser -e

Der Benutzer'der Benutzer'ist derselbe, der das Skript korrekt von der Kommandozeile aus startet. 'daily_info' ist auch der Name der Tabelle, zu der Daten durch denMySQL-ImportBefehl.

Ich würde erwarten, dass die Crontab-Aufgabe wie folgt ausgeführt wird:'der Benutzer'ermöglicht den Zugriff auf alle Ordner und Dateien,genau wie die interaktive Shell, aber das scheint nicht zu stimmen. Der geplante Job gibt mir diese Fehlermeldung

mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: daily_info

Ich habe viele Fragen gefunden im Zusammenhang mit dersichere-Datei-privProblem, aber die Antworten passen nicht gut zu diesem Fall. Ich vermute, dass der Befehl in meinem Skript (mysqlimport) mit einem anderen Benutzer ausgeführt wird, aber ich kann es nicht diagnostizieren.

Für jede Hilfe wäre ich dankbar. Danke.

Antwort1

Ich habe keine Erklärung gefunden, bin aber zu einer (Teil-)Lösung für meine eigene Frage gekommen. Ich hoffe, dass andere dazu beitragen können, dies zu verbessern. Wenn es von der Kommandozeile ausgeführt wird, läuft das Skript einwandfrei, wenn es von crontab aus aktiviert wird, wendet es die Einstellungen insecure_file_privmysql-Variable. Also habe ich diemeine.cnfDatei, indem Sie eine Zeile unter dem[mysqld]Gruppe wie hier gezeigt:

[mysqld]
...other settings here...
secure-file-priv=/mypath/datafolder/

Danach müssen Sie MySQL neu starten und mit dieser Abfrage prüfen, ob die Änderung wirksam wird:

mysql> show variables like 'secure-file-priv';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| secure_file_priv | /mypath/datafolder/    |
+------------------+------------------------+
1 row in set (0.01 sec)

Beachten Sie, dass beim Laden der Datenbank die.cnfDatei wird das Zeichen '-' in '_' (Unterstrich) umgewandelt.

verwandte Informationen