Mysql, problèmes avec dans outfile, une solution facile ou une meilleure façon de le faire?
-
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.
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.