web-dev-qa-db-fra.com

Mysqldump --password fait-il vraiment ce qu'il dit?

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).

34
John Zwinck

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é.

79
antik

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.

13
Mark Biek

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.

9
Phil Gordemer

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 ...

3
nathan

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'.

3
Steve Baker

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.

2
itsmatt

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 "="

1
Giuseppe Maxia

--password [= mot de passe]

Voici le documentation

0
Patrick Desjardins

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).

0
Justin Bennett