Mysql, Probleme mit in outfile, eine einfache Lösung oder eine bessere Art und Weise, es zu tun?

StackOverflow https://stackoverflow.com/questions/2896691

  •  04-10-2019
  •  | 
  •  

Frage

Im Moment bin ich ein einfaches Skript in KSH schreiben, die einige Strings aus einem DB nehmen sollte und in der Liste auf der Schale. Dies ist, wie es funktionieren soll:

  • Abfrage der DB für alle Daten
  • Exportieren sie in eine Textdatei
  • Mit awk die verschiedenen Spalten zeigen

Das Problem ist, dass zwei Felder der Tabelle enthalten Sätze ich abfragt. So awk, offensichtlich, „denkt“, dass die weißen Zwischenräume zwischen den verschiedenen Worten sind Trennzeichen zwischen Spalten, so dass ich mit folgenden Lösung kam:

  • SELECT * INTO OUTFILE "output" FIELDS TERMINATED BY '' FROM Tabelle
  • awk Mit Hilfe der Ergebnisse aufzulisten (offensichtlich der Separator jetzt ist '')

Aber hier habe ich ein anderes Problem, obwohl ich

  • Zugegeben die Berechtigung FILE auf den Benutzer mysql Ich verwende
  • Gave 777 auf das Verzeichnis mysql, wo er schreiben sollte

Auch so dass ich die folgende Fehlermeldung empfangen:

'Pfad': kann nicht erstellt / schreiben zu Datei 'Datei' (Fehlermeldung Errcode: 13)

durch diese Frustriert Ich habe angefangen, eine Antwort das Surfen im Internet zu finden, und ich fand einen „unvollständig“. In einer bestimmten Stelle schlagen sie vor, zu:

  • chown root: root / tmp

  • chmod 1777 / tmp

  • /etc/init.d/mysqld starten

dachte ich, dass, wenn diese Lösung fein auf / tmp funktioniert, dann sollte es kein Problem auf einem anderen Verzeichnis ich wählen. Offensichtlich war ich total falsch :). Wenn der Pfad zur outfile Option Ich gebe ist / tmp / ‚Datei‘, dann gibt es kein Problem, alle anderen Pfad kehrt mir den vorherigen Fehler. So habe ich das Problem eine ‚Lösung‘ finden? Nun, ja, aber dieses Skript zu verwenden, ein jemand müssen:

  • Haben Sie einen MySQL-Benutzer mit der Berechtigung FILE
  • Haben Sie die Rechte zu 'rm' eine Datei in / tmp (die Ausgabedatei von mysql ist temporär)

Und ich glaube nicht, das ist süß und nett. Also, was ich fragen Sie? In dem folgenden:

  • Wie kann ich MySQL zwingen, eine Datei zu schreiben, wo immer ich will?
  • Haben Sie mehr lebensfähig und ‚süß‘ Lösung als ich mir vorschlagen?

Ach, ich bin mit Ubuntu 10.4. Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Eine bessere Lösung ist Ausgabe zu umleiten:

mysql --default-character-set=utf8 -uuser -ppass -s -e "SELECT * FROM mytable;" > results.txt

Beachten Sie die -s Option:

  -s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top