Pergunta

Eu estou tentando usar mysqldump para despejar um esquema, e que na sua maioria funciona, mas eu corri para uma curiosidade: a opção -p ou --password parece que ele está fazendo algo diferente do que a definição da senha (como a página man e saída --help dizem que deveria).

Especificamente, parece que ele está fazendo o que é indicado aqui: http: //snippets.dzone. com / mensagens / show / 360 - isto é, definir o banco de dados para despejo

.

Para apoiar minha afirmação um tanto estranho, posso dizer-lhe que, se eu não especificar a opção --password (ou -p), o comando imprime a instrução de uso e sai com um erro. Se eu fizer especificá-lo, estou imediatamente solicitado a digitar uma senha (!), E, ??em seguida, o banco de dados especificado na opção --password é despejado (ou um erro é dado no caso usual que uma senha que não corresponde qualquer nome de banco de dados foi especificado) .

Aqui está uma transcrição:

    $ 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

Então, o que dá? É este o modo como este é suposto para trabalhar? Ele certamente não parece fazer sentido nem combina a documentação oficial. E finalmente, se isto apenas a maneira como ele funciona, como é que eu significava para especificar a senha para ser usado em um trabalho automatizado? Usando expect ???

Eu estou usando mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486).

Foi útil?

Solução

De homem mysqldump:

- password [= senha], -p [senha]

A senha para usar ao conectar ao servidor. Se você usar o pequeno formulário opção (-p), você não pode ter um espaço entre a opção e a senha. Se você omitir o valor da senha seguindo o --password ou opção -p na linha de comando, você será solicitado para um.
Especificando uma senha na linha de comando deve ser considerada inseguro. Veja Seção 6.6, "manter sua senha segura".

Sintaticamente, você não estiver usando o interruptor --password corretamente. Como tal, o analisador de linha de comando está vendo o seu uso de "perder" como um argumento de stand-alone que mysqldump interpreta como o nome do banco de dados como seria se você fosse tentar um comando mais simples como mysqldump lose

Para corrigir isso, tente usar --password=lose ou -plose ou simplesmente uso -p ou --password e digite a senha quando solicitado.

Outras dicas

Outra opção é criar o arquivo ~ / .my.cnf (permissões precisa ser 600).

Adicione esta ao arquivo .my.cnf

[client]
password=lose

Isso permite que você se conectar como um usuário MySQL, que requer uma senha sem ter que digitar a senha. Você não precisa mesmo de o -p ou --password.

Muito útil para scripting mysql & mysqldump comandos.

Eu descobri que isso acontece se a sua senha possui caracteres especiais nele. A senha mysql aqui tem um! nela, então eu tenho que fazer == password = 'xxx! xxxx' para que ele funcione corrrectly. Observe as "marcas.

Eu não tenho certeza se ele funciona para a versão --password, mas se você usar -p você pode especificar a senha imediatamente depois (a chave não é incluir um espaço):

mysqldump -pmypassword ...

Tente colocar um '=' entre perder --password como:

--password=lose

Se você usar -p, então não pode haver nenhum espaço entre o -p e a senha, ou seja, '-plose'.

Você tentou = --password whatever-senha é?

Talvez eu estou faltando a questão, mas isso é o que eu faço para executar a ferramenta.

Se você usar o -p ou --password sem um argumento, você receberá um aviso, pedindo para inserir uma senha.

Se você quiser indicar uma senha na linha de comando, você deve usar -pYOURPASSWORD ou --password = yourpassword. Observe que não há nenhum espaço após -p, e há um sinal "=" após --password.

No seu exemplo, mysqldump pede uma senha e, em seguida trata "perder" como o nome do banco. Se isso fosse a sua senha, você deve ter incluído um "="

A opção -p não requer um argumento. É só colocar -p ou --password para indicar que você está indo para usar uma senha para acessar o banco de dados. A razão é despejar o banco de dados chamado o que você colocar depois -p é que o último argumento para mysqldump deve ser o nome do banco de dados que você deseja despejar (ou --all-databases se você quiser todos eles).

@ resposta de Nathan também é verdadeiro. Você pode especificar a senha imediatamente seguindo a opção -p (útil em scripts e tal onde você não pode entrar com a mão depois de executar o comando).

- password [= senha]

Aqui está a documentação

Talvez o usuário "teste" não tem a permissão para acessar seu banco de dados "perder"?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top