2009-03-21 3 views
14

Je suis en train de capturer la sortie d'une requête SQL dans MySQL, dans un fichier texte à l'aide de la requête suivante.sortie de la requête dans un fichier donne erreur d'accès refusé

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt'; 

Je reçois l'erreur suivante.

erreur 1045 (28000): Accès refusé pour l'utilisateur 'nom d'utilisateur' @ '%' (en utilisant le mot de passe: YES)

Toute idée, où vais-je tort? Est-ce un problème lié à la permission?

+0

Que faites-vous exactement? Etes-vous en train de taper des commandes dans la console client mysql ou dans le terminal système? – Vasil

+0

pas lié à la programmation – cletus

+0

Je tape des commandes via la console MySQL – Arnkrishn

Répondre

30

Outfile est sa propre autorisation dans mysql.

Si vous avez TOUT c'est inclus.

Mais si vous disposez simplement d'une collection sûre telle que SELECT, INSERT, UPDATE, SUPPRESSION, DROP, CREATE, mais pas OUTFILE, "outfichier" ne fonctionnera pas dans les requêtes. La raison en est que l'accès aux fichiers à partir de MySQL, même à des fins d'écriture, comporte certains risques de sécurité, car si vous accédez à un fichier depuis mysql, vous pouvez accéder à n'importe quel fichier auquel l'utilisateur mysql a accès. autorisations de fichier basé.

Pour contourner ce problème, vous pouvez exécuter votre requête directement dans la sortie de tout shell/langue que vous utilisez pour exécuter le sql avec.

Voici un exemple * nix

>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt 

Mais le faire sur une seule ligne sans le « \ » ou utiliser le « \ » pour échapper à la coupure de ligne.

Ce qui se passe ici est que vous exécutez une requête dans le client MySQL et il est crachant le résultat, alors vous diriger la sortie vers un fichier. Donc, le fichier n'est jamais appelé depuis mysql, il est appelé après mysql.

Il faut donc utiliser MySQL pour obtenir les informations et jeter ensuite les données dans le fichier à partir de votre propre shell utilisateur et vous serez bien.

Ou trouver un moyen de vous procurer la permission outfile de MySQL, de toute façon.

+0

c'est super! Merci beaucoup – ajay

4

Si c'est votre système (vous admin), et vous savez comment fixer, voici comment activer ces autorisations.

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
Questions connexes