Question

J'essaie d'utiliser mysqldump pour vider un schéma, et cela fonctionne généralement, mais j'ai rencontré une curiosité: le -p ou le mot de passe L’option semble indiquer qu’elle fait autre chose que de définir le mot de passe (comme le disent les pages man et - help .

).

En particulier, on dirait que c'est ce qui est indiqué ici: http: //snippets.dzone. com / posts / show / 360 , c’est-à-dire que la base de données doit être vidée.

Pour appuyer ma revendication quelque peu farfelue, je peux vous dire que si je ne spécifie pas l'option - password (ou -p ), la commande affiche l'utilisation. instruction 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 vidée (ou une erreur est générée dans le cas habituel mot de passe ne correspondant à aucun nom de base de données a été spécifié).

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 donne? Est-ce la façon dont cela est censé fonctionner? Cela ne semble certainement pas avoir de sens et ne correspond pas à la documentation officielle. Et enfin, si cela fonctionne comme cela, comment est-ce que je veux spécifier le mot de passe à utiliser dans un travail automatisé? Utilisation de expect ???

J'utilise mysqldump Ver 10.10 Distrib 5.0.22, pour pc-linux-gnu (i486) .

Était-ce utile?

La solution

De man mysqldump:

  

- mot de passe [= mot de passe], -p [mot de passe]

     

Mot de passe à utiliser lors de la connexion au serveur. Si tu utilises   forme abrégée (-p), vous ne pouvez pas laisser d’espace entre les options             et le mot de passe. Si vous omettez la valeur du mot de passe après le             --password ou -p sur la ligne de commande, vous êtes invité à             un.
            La spécification d'un mot de passe sur la ligne de commande doit être considérée             peu sûr. Voir la section 6.6, "Protection de votre mot de passe".

Syntaxiquement, vous n’utilisez pas le commutateur --password correctement. En tant que tel, l’analyseur en ligne de commande constate l’utilisation que vous faites de " lost " en tant qu'argument autonome que mysqldump interprète comme le nom de la base de données, comme si vous tentiez une commande plus simple comme mysqldump perdre

Pour corriger cela, essayez d’utiliser - password = lost ou -plose ou utilisez simplement -p ou - password et tapez le mot de passe lorsque vous y êtes invité.

Autres conseils

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

Ajouter ceci au fichier .my.cnf

[client]
password=lose

Ceci vous permet de vous connecter en tant qu'utilisateur MySQL qui requiert un mot de passe sans avoir à le saisir. Vous n'avez même pas besoin de -p ou --password.

Très pratique pour écrire des scripts avec mysql & amp; commandes 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! je dois donc faire == password = 'xxx! xxxx' pour que cela fonctionne correctement. Notez les marques.

Je ne sais pas si cela fonctionne pour la version de --password, mais si vous utilisez -p, vous pouvez spécifier le mot de passe immédiatement après (la clé ne doit pas inclure d'espace):

mysqldump -pmypassword ...

Essayez de placer un '=' entre - le mot de passe lâche 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 la question me manque, mais c’est ce que je fais pour utiliser cet outil.

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 "&"; " signer après --password.

Dans votre exemple, mysqldump demande un mot de passe, puis traite "perdre". comme nom de base de données. Si tel était votre mot de passe, vous auriez dû inclure un " = "

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 on vide la base de données nommée quoi que vous ayez placé après -p est que le dernier argument de mysqldump devrait être le nom de la base de données que vous voulez vider (ou --all-database 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 dans les cas où vous ne pouvez pas le saisir manuellement après l'exécution de la commande).

- mot de passe [= mot de passe]

Voici la documentation

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top