2008-09-29 7 views
34

Je suis en train d'utiliser mysqldump pour vider un schéma, et il fonctionne la plupart du temps, mais je suis tombé sur une curiosité: l'option -p ou --password semble que cela fait autre chose que la mise en le mot de passe (comme la page man et --help sortie disent cela devrait). Plus précisément, on dirait qu'il fait ce qui est indiqué ici: http://snippets.dzone.com/posts/show/360 - c'est-à-dire, mettre la base de données en mémoire. Pour prendre en charge mon affirmation un peu farfelue, je peux vous dire que si je ne spécifie pas l'option --password (ou -p), la commande imprime l'instruction d'utilisation et quitte 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 supprimée (ou une erreur est généralement signalée si un mot de passe ne correspond à aucun nom de base de données) .Est-ce que mysqldump --password fait vraiment ce qu'il dit?

Voici une transcription:

 
    $ mysqldump -u test -h myhost --no-data --tables --password lose 
    Enter password: 
    -- MySQL dump 10.10 
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to 
    database 'lose' when selecting the database 

Alors, qu'est-ce qui se passe? Est-ce la façon dont cela est censé fonctionner? Cela ne semble sûrement pas logique et ne correspond pas à la documentation officielle. Et enfin, si c'est comme ça que ça fonctionne, comment dois-je spécifier le mot de passe à utiliser dans un travail automatisé? En utilisant expect ??? J'utilise mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486).

+0

étiquettes génériques supprimées, ajoutées gotcha – Sklivvz

Répondre

79

De l'homme mysqldump:

--password [= password], -p [password]

Le mot de passe à utiliser lors de la connexion au serveur. Si vous utilisez le formulaire d'option court (-p), vous ne pouvez pas avoir un 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é à entrer un .
La spécification d'un mot de passe sur la ligne de commande doit être prise en compte non sécurisée. Voir Section 6.6, «Garder votre mot de passe sécurisé».

Syntaxe, vous n'utilisez pas le commutateur --password correctement. En tant que tel, l'analyseur de ligne de commande voit votre utilisation de "perdre" comme un argument autonome que mysqldump interprète comme le nom de base de données comme si vous deviez essayer une commande plus simple comme mysqldump lose

Pour corriger cela, essayez en utilisant --password=lose ou -plose ou simplement utiliser -p ou --password et tapez le mot de passe lorsque vous y êtes invité.

+18

Vous avez tout à fait raison - merci. C'est vraiment bizarre que l'option '-U username' permette un espace, mais pas l'option' -ppassword'. Pas un design intuitif. –

+1

Toute idée comment obtenir 'mysqldump' pour me donner le" Attention: l'utilisation d'un mot de passe sur l'interface de ligne de commande peut être non sécurisé "? –

+0

-pwin, @antik;) –

2

Avez-vous essayé --password = quel-mot de passe-est? Peut-être que la question me manque, mais c'est ce que je fais pour exécuter l'outil.

3

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é est de ne pas inclure un espace):

mysqldump tapez -pmonmotdepasse.

0

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 la base de données est nommée tout ce que vous avez mis après -p est que le dernier argument pour mysqldump devrait être le nom de la base de données que vous voulez sauvegarder (ou --all-databases si vous les voulez tous).

@ 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 l'entrer à la main après l'exécution de la commande).

3

Essayez de placer un « = » entre --password perdre comme:

--password=lose 

Si vous utilisez -p, alors il ne peut y avoir aucun espace entre le -p et le mot de passe, par exemple « -plose » .

13

Une autre option est de créer le fichier ~/.my.cnf (autorisations doivent être 600).

Ajouter ce fichier au .my.cnf

[client] 
password=lose 

Cela vous permet de vous connecter en tant qu'utilisateur MySQL qui a besoin d'un mot de passe sans avoir à entrer réellement le mot de passe. Vous n'avez même pas besoin de -p ou --password.

Très pratique pour l'écriture de scripts mysql & commandes mysqldump.

1

Si vous utilisez -p ou --password sans argument, vous recevrez 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 vous demande un mot de passe, puis traite "lost" comme le nom de la base de données. Si c'était votre mot de passe, vous auriez dû inclure un "="

-2

Peut-être que votre utilisateur "test" n'a pas la permission d'accéder à votre base de données "perdue"?

9

J'ai trouvé 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 == mot de passe = 'xxx! xxxx' pour que cela fonctionne correcectement. Notez les marques.

+0

Merci! M'a sauvé des heures – CreativityKills

+0

m'a sauvé des heures aussi bien! – lookdad

Questions connexes