Question

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.

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é (en utilisant le mot de passe: OUI) pour l'utilisateur 'username' @ '%'

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

Était-ce utile?

La solution

Outfile est sa propre autorisation dans une base MySQL.

Si vous avez tout ce qui est inclus.

Mais si vous avez juste une collection sûre telle que SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, mais pas OUTFILE, "dans outfile" ne fonctionnera pas dans les requêtes.

La raison est que l'accès aux fichiers à partir de MySQL, même à des fins d'écriture, a certains risques de sécurité, parce que si vous accédez à un fichier de MySQL, vous pouvez accéder à tous les fichiers de l'utilisateur MySQL a accès, contournant ainsi basée sur l'utilisateur autorisations de fichiers.

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.

Qu'est-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. Ainsi, le fichier est jamais appelé à partir de MySQL, il est appelé après l'exécution de 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 très bien.

Ou trouver un moyen de vous obtenir la permission outfile mysql, de toute façon.

Autres conseils

Si c'est votre système (Vous êtes 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top