J'essaie d'utiliser mysqldump
pour vider un schéma, et cela fonctionne principalement, mais je suis tombé sur une curiosité: l'option -p
Ou --password
Semble faire quelque chose d'autre que de définir le mot de passe (comme le disent la page man
et la sortie --help
).
Plus précisément, il semble faire ce qui est indiqué ici: http://snippets.dzone.com/posts/show/36 - c'est-à-dire définir la base de données à vider.
Pour soutenir ma revendication quelque peu bizarre, je peux vous dire que si je ne spécifie pas l'option --password
(Ou -p
), La commande imprime la déclaration d'utilisation et se termine avec une erreur. Si je le spécifie, je suis immédiatement invité à entrer un mot de passe (!), Puis la base de données spécifiée dans l'option --password
Est vidée (ou une erreur est donnée dans le cas habituel qu'un mot de passe ne correspond à aucun le nom de la base de données a été spécifié).
Voici une transcription:
$ mysqldump -u test -h myhost --no-data --tables --password loss Entrez le mot de passe: - MySQL dump 10.10 mysqldump: Erreur obtenue: 1044: accès refusé pour l'utilisateur 'test' @ '%' à la base de données 'Perdue' lors de la sélection de la base de données
Alors, qu'est-ce qui donne? Est-ce ainsi que cela est censé fonctionner? Cela ne semble sûrement pas logique et ne correspond pas à la documentation officielle. Et enfin, si cela fonctionne comme cela, comment dois-je spécifier le mot de passe à utiliser dans un travail automatisé? Utilisation de expect
???
J'utilise mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486)
.
De man mysqldump:
--password [= mot de passe], -p [mot de passe]
Le mot de passe à utiliser quand on se connecte au serveur. Si vous utilisez le formulaire d'option court (-p), vous ne pouvez pas avoir d'espace entre l'option et le mot de passe. Si vous omettez la valeur du mot de passe après l'option --password ou -p sur la ligne de commande, vous êtes invité à en indiquer une.
La spécification d'un mot de passe sur la ligne de commande doit être considérée comme non sécurisée. Voir Section 6.6, "Protection de votre mot de passe".
Syntaxiquement, vous n'utilisez pas correctement le commutateur --password. En tant que tel, l'analyseur de ligne de commande voit votre utilisation de "perdre" comme argument autonome que mysqldump interprète comme le nom de la base de données comme il le ferait si vous tentiez une commande plus simple comme mysqldump lose
Pour corriger cela, essayez d'utiliser --password=lose
ou -plose
ou utilisez simplement -p
ou --password
et tapez le mot de passe lorsque vous y êtes invité.
Une autre option consiste à créer le fichier ~/.my.cnf (les autorisations doivent être de 600).
Ajoutez ceci au fichier .my.cnf
[client]
password=lose
Cela vous permet de vous connecter en tant qu'utilisateur MySQL qui nécessite un mot de passe sans avoir à entrer réellement le mot de passe. Vous n'avez même pas besoin du mot de passe -p ou -.
Très pratique pour l'écriture de scripts mysql et mysqldump.
J'ai constaté que cela se produit si votre mot de passe contient des caractères spéciaux. Le mot de passe mysql ici a un! dedans, donc je dois faire == password = 'xxx! xxxx' pour que cela fonctionne correctement. Notez les 'marques.
Je ne sais pas si cela fonctionne pour la version --password, mais si vous utilisez -p, vous pouvez spécifier le mot de passe immédiatement après (la clé n'est pas d'inclure un espace):
mysqldump -pmypassword ...
Essayez de placer un '=' entre --password perdre comme:
--password=lose
Si vous utilisez -p, il ne peut y avoir d'espace entre le -p et le mot de passe, c'est-à-dire '-plose'.
Avez-vous essayé --password = quel que soit le mot de passe?
Peut-être que je manque la question, mais c'est ce que je fais pour exécuter l'outil.
Si vous utilisez -p ou --password sans argument, vous obtiendrez une invite, vous demandant d'insérer un mot de passe.
Si vous souhaitez indiquer un mot de passe sur la ligne de commande, vous devez utiliser -pYOURPASSWORD ou --password = YOURPASSWORD. Notez qu'il n'y a pas d'espace après -p et qu'il y a un signe "=" après --password.
Dans votre exemple, mysqldump demande un mot de passe, puis traite "perdre" comme nom de base de données. Si c'était votre mot de passe, vous auriez dû inclure un "="
--password [= mot de passe]
Voici le documentation
L'option -p ne nécessite pas d'argument. Vous venez de mettre -p ou --password pour indiquer que vous allez utiliser un mot de passe pour accéder à la base de données. La raison pour laquelle il vide la base de données nommée quoi que vous mettiez après -p est que le dernier argument pour mysqldump devrait être le nom de la base de données que vous voulez vider (ou - toutes les bases de données si vous les voulez toutes).
@ La réponse de Nathan est également vraie. Vous pouvez spécifier le mot de passe immédiatement après le commutateur -p (utile dans les scripts et autres où vous ne pouvez pas le saisir manuellement après avoir exécuté la commande).