Como o ubuntu, mysql determina o nome do host?

1

Este é o Q específico: Eu tenho o apache rodando no Ubuntu em paralelos e mysql rodando nesta VM e no host OS X. Desde que eu tento emular meus ambientes de produção localmente eu conecto ao servidor mysql remoto no OS X. Eu faço isso com sucesso para alguns clientes e agora tenho um novo.

Eu tenho umhef.ca, osx e dom.biz no meu arquivo hosts ubuntu. Quando eu faço ping no OS X do Ubuntu, ele reporta sucesso e o IP correto. Meu arquivo de configurações do drupal é configurado para o host 'osx' e o usuário 'rootd'. O usuário está configurado no servidor OS x mysql com direitos para este banco de dados. Como eu sei disso? Eu posso ver outros usuários que configuram com sucesso no mysql e eles parecem ser o mesmo que este usuário.

Esse é o plano de fundo para ajudar-me a solucionar o motivo do erro: PDOException: SQLSTATE [HY000] [1045] Acesso negado para o usuário 'rootd'@'umhef.ca' (usando a senha: YES)

WTF é esse host vindo? É legítimo host como ele e os outros apontam para o Os x VM. Então, para solucionar isso eu tentei isso do Ubuntu:

mysql --host=osx --user=rootd --password=mypassword
Access denied for user 'rootd'@'umhef.ca' (using password: YES)

Eu tentei comentar o meu arquivo hosts do ubuntu, mas por que o ubuntu está ignorando o parâmetro host? O que mais devo usar para solucionar isso? thx, sam

    
por sam452 08.05.2015 / 18:32

1 resposta

1

Se você pode logar no MySQL como root @ localhost, execute o seguinte

SELECT USER(),CURRENT_USER();

O que isso lhe diz:

Quando você tem o erro

Access denied for user 'rootd'@'umhef.ca' (using password: YES)

A parte do host foi determinada pela tabela mysql.user . O MySQL tem uma maneira peculiar, mas metódica, de fazer autenticação de usuário. Em seu tempo livre, você pode ler meu post DBA StackExchange Erro do MySQL: Acesso negado para o usuário 'a' @ 'localhost' (usando a senha: YES) sobre como funciona.

De qualquer forma, para tentar ir direto ao assunto, faça isso

SELECT user,host FROM mysql.user;

Isso lhe dará todos os possíveis valores de CURRENT_USER() (formas que você tem permissão para se conectar ao MySQL). Meu palpite é que você estava logando tentando fazer o login como rootd@osx e você provavelmente não tem uma entrada em mysql.user . Em outras palavras, se você executar

SELECT CONCAT(user,'@',host) userhost FROM mysql.user
WHERE user='rootd' AND host='osx';

você não receberá nada. Se você correr

SELECT CONCAT(user,'@',host) userhost FROM mysql.user WHERE user='rootd';

você pode ver [email protected] . Se você não fizer isso, então o mysqld assume que você está vindo dessa forma e não existe autenticação correspondente em mysql.user .

Se você fez alguma alteração no sistema operacional, reinicie o mysqld para que ele possa saber essas mudanças.

    
por 08.05.2015 / 19:23