Mysql, problèmes avec dans outfile, une solution facile ou une meilleure façon de le faire?

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

  •  04-10-2019
  •  | 
  •  

Question

au moment où j'écris un script simple ksh qui devrait prendre quelques cordes d'une base de données et liste les sur la coquille. Voici comment cela devrait fonctionner:

  • Interrogez la base de données pour toutes les données
  • Exporter les dans un fichier texte
  • Utiliser awk pour afficher les différentes colonnes

Le problème est que deux champs de la table je contiennent des phrases interrogation. Donc, awk, de toute évidence, « pense » que les espaces blancs entre les différents mots sont des séparateurs entre les colonnes, donc je suis venu avec la solution suivante:

  • SELECT * INTO OUTFILE "sortie" FIELDS TERMINATED BY '' FROM table
  • Utilisation awk à la liste des résultats (évidemment le séparateur est maintenant '')

Mais ici, j'ai une autre question, bien que j'ai

  • a accordé le privilège de fichier à l'utilisateur mysql J'utilise
  • Gave à mysql 777 sur le répertoire où il doit écrire

Même si je reçois l'erreur suivante:

  

'path': ne peut pas créer / écrire dans le fichier 'fichier' (Errcode: 13)

Frustré par ce que j'ai commencé à surfer sur le Web pour trouver une réponse, et je l'ai trouvé un un « incomplet ». Dans un certain site, ils suggèrent à:

  • chown root: root / tmp

  • chmod 1777 / tmp

  • /etc/init.d/mysqld début

Je pense que, si cette solution fonctionne très bien sur / tmp alors il ne devrait pas y avoir de problème sur tout autre répertoire que je choisis. De toute évidence, je suis tout à fait tort :). Si le chemin que je donne à l'option outfile est / tmp / « fichier » alors il n'y a pas de problème, tout autre me retourne chemin l'erreur précédente. Donc, ai-je trouvé une « solution » au problème? Eh bien, oui, mais d'utiliser ce script que quelqu'un a à:

  • Demandez à un utilisateur de MySQL avec le privilège FILE
  • ont droit à la « rm » un fichier dans / tmp (le fichier de sortie de MySQL est temporaire)

Et je ne pense pas que ce soit doux et agréable. Alors, que je vous demande? Ce qui suit:

  • Comment puis-je forcer MySQL à écrire un fichier où je veux?
  • Avez-vous plus viable et d'une solution 'doux' que le mien pour me suggérer?

Ah, j'utilise Ubuntu 10.4. Merci pour toute aide.

Était-ce utile?

La solution

Une meilleure solution consiste à rediriger la sortie:

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

L'esprit l'option -s:

  -s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top