J'essaie de définir un travail cron pour prendre la sauvegarde de ma machine esclave. J'ai donc besoin d'arrêter l'esclave
J'ai émis une commande
mysqladmin --user=root --password=test_pass stop-slave
Mais c'est jeter une erreur:
mysqladmin: échec de la connexion au serveur à 'localhost' erreur: 'Accès refusé pour l'utilisateur' root '@' localhost '(en utilisant le mot de passe: OUI)'
Maintenant, j'ai essayé avec la commande
mysqladmin --user=root --password stop-slave
Il demande un mot de passe et j'ai donné au fur test_pass
et à mesure que tout allait bien.
Pourquoi est-il arrivé ainsi? Quelle est l'alternative?
NB: BTW ma version mysql est mysql-5.0.95-5
, ça a du sens.
mysql
authentication
mysqladmin
Praveen Prasannan
la source
la source
'
guillemets simples devrait éviter ce problème. gnu.org/software/bash/manual/bashref.html#QuotingRéponses:
Les arguments de la ligne de commande sont sujets à interprétation par l'interpréteur de commandes du système, modifiant le comportement de la commande ou modifiant la valeur des arguments avant qu'ils ne soient transmis au programme appelé.
Lorsqu'un argument (tel que la valeur de
--password
) contient un caractère que le shell peut interpréter, il doit être soit cité (généralement entre guillemets simples'
dans unix ou double entre guillemets"
dans Windows) ou échappé individuellement (généralement avec une barre oblique inverse\
avant chaque métacaractère). ) pour éviter une interprétation par le shell.Bien que les caractères spécifiques soient spécifiques au système, certains caractères à surveiller incluent:
Si le mot de passe, pour un très mauvais exemple, était défini sur
pa$$word
...Lectures complémentaires:
Mise à jour: pour échapper aux guillemets
'
simples ou"
doubles dans le mot de passe, vous pouvez soit les échapper avec une barre oblique inversée, soit enfermer l'argument entier dans le style de guillemets opposé s'il n'y a pas d'autres caractères que le style de citation choisi n'est pas compatible avec.Si vous avez un guillemet simple et d'autres caractères spéciaux, vous êtes coincé avec une barre oblique inversée car, sous Unix, le guillemet double est "plus faible" qu'un guillemet simple et de nombreux métacaractères sont toujours développés lorsqu'ils sont placés entre guillemets doubles mais pas simples citations.
Ce n'est pas spécifique à MySQL mais s'applique à tout ce qui a des arguments en ligne de commande.
Vous pouvez généralement utiliser la
echo
commande pour voir comment le shell interprète vos arguments.Suivi: le shell bash (et vraisemblablement certains autres) permet d'échapper aux guillemets simples dans les chaînes entre guillemets simples, bien que la convention soit bizarre (probablement basée sur une décision oubliée depuis longtemps perdue dans la nuit des temps):
Remplacez chacun
'
à l'intérieur de la chaîne par'\''
avant de mettre la chaîne entière entre guillemets simples ... afin que la chaîne littéralefoo'bar
soit exprimée sous la forme'foo'\''bar'
.Comme je l'ai dit, bizarre. Cela est nécessaire car une barre oblique inversée échappe à un guillemet simple en dehors d'une seule chaîne entre guillemets, une barre oblique inversée n'échappe rien à l' intérieur d'une chaîne entre guillemets simples dans bash, et les chaînes entre guillemets simples peuvent être fermées et rouvertes par plusieurs guillemets simples tant qu'il n'y a pas d'échappée personnages intermédiaires qui ont une signification particulière. Alors
'\''
ferme la citation de la chaîne, puis fournit alors littéral, se sont échappés rouvre la citation de la chaîne.la source
pa$$word
Une addition:
Sur une machine Windows, nous avons également eu du mal avec un mot de passe: il contenait
%
ce qu'il fallait échapper car%%
(Les citations seules ne suffisent pas ici)la source