mysqldump demandant un mot de passe en shellscript

9

J'ai écrit un script shell simple pour vider une base de données mysql spécifique. Le problème est qu'il me demande un mot de passe même si je le fournis. La base de données mysql est la version 5.0.27 si cela importe. Voici la ligne spécifique que j'utilise.

$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE

J'ai essayé plusieurs variantes, mais en vain.

aduljr
la source

Réponses:

4

Je parie que ce $MyPassn'est pas réglé correctement dans votre script. Si l'un des outils de ligne de commande mysql reçoit un -pqui n'est pas immédiatement suivi d'un mot de passe, ils supposent qu'ils doivent demander le mot de passe. Si, d'autre part, vous avez fourni un mot de passe incorrect (ou le mauvais nom d'utilisateur ou similaire), il ne pourrait tout simplement pas se connecter.

Donc, je suggère de placer une echocommande au début de cette ligne et de réexécuter votre script, comme ceci:

echo $MYSQLDUMP -u backup -p$MyPass $DB

N'oubliez pas de supprimer la redirection de sortie.

Insyte
la source
1
doh, c'était la variable stupide, avait passé en majuscules quand elle a été définie vs minuscule dans la ligne ci-dessus. merci les gars
aduljr
18

Une meilleure solution serait de stocker le nom d'utilisateur et le mot de passe dans un fichier de configuration et de pointer vers ce fichier de configuration. En l'ayant dans la ligne de commande, toute personne pouvant exécuter ps pourrait trouver le mot de passe de votre serveur.

Passez --defaults-extra-file=/pathto/database.cnfau vidage mysql.

Le fichier de configuration doit ressembler à ceci. Définissez les autorisations du système de fichiers afin que seul le processus de sauvegarde puisse ouvrir le fichier de configuration.

[client]
host     = servername.domain.tld
user     = backup
password = strongpassword

Mise à jour (2016-06-29) Si vous exécutez mysql 5.6.6 ou une version ultérieure, vous devez consulter l' outil mysql_config_editor qui vous permet de stocker les informations d'identification dans un fichier crypté. Merci à Giovanni de m'en avoir parlé.

Zoredache
la source
c'est un utilisateur spécifique pour cette base de données avec seulement les autorisations suffisantes pour effectuer une sauvegarde. Seules deux personnes ont accès à ce serveur, moi et une autre personne. Mais je vais utiliser cette idée de fichier cnf. n'a jamais connu cette option. merci
aduljr
3
Je sais que c'est une ancienne réponse, mais apparaît toujours lors de la recherche de la façon de passer le mot de passe en toute sécurité et il est également lié à d'autres messages. En utilisant la version 5.5, j'ai dû encapsuler le mot de passe fort en tics simples dans le fichier de configuration, comme si mon mot de passe est aoeu1234, mon fichier de configuration a password = 'aoeu1234'; sinon, vous obtiendrez une erreur non autorisée.
Damon
Vous vous demandez s'il existe une solution qui n'inclut pas de mot de passe en texte clair dans un fichier .cnf.
Bob Stein
@Zoredache, comment "quiconque peut exécuter ps pourrait trouver le mot de passe de votre serveur"?
Pacerier
@Damon, et si votre mot de passe comporte ces graduations?
Pacerier