Estou tentando definir um trabalho cron para fazer backup da minha máquina escrava. Então eu preciso parar o escravo
Eu emiti um comando
mysqladmin --user=root --password=test_pass stop-slave
Mas está lançando erro:
mysqladmin: falha ao conectar-se ao servidor no 'localhost' erro: 'Acesso negado para o usuário' root '@' localhost '(usando a senha: YES)'
Agora eu tentei com o comando
mysqladmin --user=root --password stop-slave
Ele solicita a senha e eu dei como test_pass
e estava tudo bem.
Por que isso aconteceu? Qual é a alternativa?
NB: Aliás, minha versão do mysql é mysql-5.0.95-5
que faz algum sentido.
mysql
authentication
mysqladmin
Praveen Prasannan
fonte
fonte
'
aspas simples deve evitar esse problema. gnu.org/software/bash/manual/bashref.html#QuotingRespostas:
Os argumentos da linha de comando estão sujeitos a interpretação pelo shell de comando do sistema, alterando o comportamento do comando ou alterando o valor dos argumentos antes de serem passados para o programa chamado.
Quando um argumento (como o valor de
--password
) contém um caractere que o shell pode interpretar, ele precisa ser citado (geralmente entre aspas simples'
no unix ou aspas duplas"
no Windows) ou ser escapado individualmente (geralmente com uma barra invertida\
antes de cada metacaractere ) para evitar a interpretação do shell.Embora os caracteres específicos sejam específicos do sistema, alguns caracteres a serem observados incluem:
Se a senha, para um péssimo exemplo, estiver definida como
pa$$word
...Leitura adicional:
Atualização: para escapar de aspas
'
simples ou"
duplas na senha, você pode escapá-las com uma barra invertida à esquerda ou colocar todo o argumento no estilo oposto de aspas, se não houver outros caracteres que o estilo de citação escolhido não seja compatível com.Se você possui uma citação simples e outros caracteres especiais, está com a barra invertida escapando porque, no unix, a citação dupla é "mais fraca" do que uma citação única e muitos metacaracteres ainda são expandidos quando colocados entre aspas duplas, mas não individuais. citações.
Isso não é específico do MySQL, mas se aplica a qualquer coisa com argumentos de linha de comando.
Normalmente, você pode usar o
echo
comando para ver como o shell está interpretando seus argumentos.Acompanhamento: O shell bash (e presumivelmente alguns outros) permite escapar aspas simples dentro de strings de aspas simples, embora a convenção seja bizarra (provavelmente baseada em alguma decisão esquecida perdida agora para as brumas do tempo):
Substitua cada um
'
dentro da cadeia por'\''
antes de agrupar a cadeia inteira entre aspas simples ... para que a cadeia literalfoo'bar
seja expressa como'foo'\''bar'
.Como eu disse, bizarro. Isso é necessário porque uma barra invertida escapa uma citação única fora de uma única cadeia de caracteres entre aspas, uma barra invertida não escapa nada dentro de uma cadeia de caracteres entre aspas simples no bash e as cadeias de caracteres entre aspas simples podem ser fechadas e reabertas por várias aspas simples, desde que não haja escape caracteres intervenientes com significado especial. Então
'\''
fecha a citação da sequência, fornece o literal escapado e reabre a citação da sequência.fonte
pa$$word
Adição:
Em uma máquina Windows, também lutamos com uma senha: ela contém as
%
que precisam ser escapadas como%%
(As aspas por si só não são suficientes aqui)fonte