Des idées?
SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property
WHERE managerGroupID = {$managerGroupID}
Erreur:
Access denied for user 'asdfsdf'@'localhost' (using password: YES)
Essayez d’exécuter cette commande SQL:
> grant all privileges
on YOUR_DATABASE.*
to 'asdfsdf'@'localhost'
identified by 'your_password';
> flush privileges;
Il semble que vous rencontriez des problèmes pour vous connecter à la base de données et ne pas écrire dans le dossier que vous mentionnez.
Assurez-vous également que vous avez accordé FILE
à l'utilisateur 'asdfsdf'@'localhost'
.
> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
Honnêtement, je n'ai pas pris la peine de traiter avec les subventions et cela a fonctionné même sans les privilèges:
echo "select * from employee" | mysql --Host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
Comme @fijaaron le dit,
GRANT ALL
n'implique pas GRANT FILE
GRANT FILE
ne fonctionne qu'avec *.*
Alors faites
GRANT FILE ON *.* TO user;
Depuis que cP/WHM a perdu la possibilité de modifier les privilèges utilisateur en tant que root dans PHPMyAdmin, vous devez utiliser la ligne de commande pour:
mysql> GRANT FILE ON *.* TO 'user'@'localhost';
L'étape 2 consiste à permettre à cet utilisateur de transférer un fichier dans un dossier spécifique. Il y a plusieurs façons de faire cela mais j'ai fini par mettre un dossier dans:
/home/user/tmp/db
et
chown mysql:mysql /home/user/tmp/db
Cela permet à l'utilisateur mysql d'écrire le fichier. Comme les précédentes affiches l'ont dit, vous pouvez aussi utiliser le dossier temporaire MySQL. Je suppose que cela n'a pas vraiment d'importance, mais vous ne voulez absolument pas lui donner l'autorisation 0777 (accessible en écriture), à moins que vous ne souhaitiez que le monde entier voie vos données. Il y a un problème potentiel si vous voulez rincer-répéter le processus car INTO OUTFILE
Ne fonctionnera pas si le fichier existe. Si vos fichiers appartiennent à un autre utilisateur, le simple fait d'essayer de unlink($file)
ne fonctionnera pas. Si vous êtes comme moi (paranoïaque à propos de 0777), vous pouvez définir votre répertoire cible à l'aide de:
chmod($dir,0777)
juste avant de faire la commande SQL, puis
chmod($dir,0755)
immédiatement après, suivi de unlink(file)
pour supprimer le fichier. Cela permet de garder tout cela sous votre utilisateur Web et ne nécessite pas d'appeler l'utilisateur mysql.