Estou tendo problemas para usar a replicação quando as máquinas estão configuradas para usar nomes de host em vez de endereços IP. O "skip-name-resolve" está DESLIGADO.
Se eu usar endereços IP, está tudo bem. Usando nomes DNS, tudo para.
no mestre
A replicação é configurada com o seguinte comando:
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'slavename.internal.domain' IDENTIFIED BY 'repl_pwd';
no escravo
A conexão do escravo é configurada como tal:
change master to
master_host='mastername',
master_user='repluser',
master_password='repl_pwd',
master_log_file='mastername.000001',
master_log_pos=1;
O erro que estou recebendo
Ao iniciar o slave de replicação, o arquivo de log mostra as seguintes mensagens:
120127 14:07:48 [Note] Slave SQL thread initialized, starting replication in log 'mastername.000001' at position 4, relay log './mysql-relay-bin.000001' position: 4
120127 14:07:48 [ERROR] Slave I/O: error connecting to master 'repluser@mastername:3306' - retry-time: 60 retries: 86400, Error_code: 1130
Se eu tentar conectar usando a linha de comando da máquina cliente usando:
mysql -h mastername -u repluser -prepl_pwd
Eu recebo o erro:
ERROR 1130 (HY000): Host 'the.ip.address.here' is not allowed to connect to this MySQL server
Eu realmente espero que alguém possa me ajudar com meus problemas de resolução de domínio!!!
Eu me sinto péssimo por ter esquecido essa questão!!!
Eu localizei e corrigi o problema da seguinte maneira.
Quando os nomes DNS foram adicionados ao DNS, a pesquisa reversa correspondente não foi criada.
Isso fez com que o MySQL não pudesse realizar a pesquisa reversa do endereço IP para o nome DNS correto e, portanto, rejeitou a conexão.
Portanto, adicionamos um conjunto de pesquisas reversas do endereço IP aos nomes DNS, executamos
FLUSH HOSTS;
em todas as caixas do MySQL e tudo começou a funcionar.Exigimos o uso de nomes DNS para todas as conexões, pois nossa solução de recuperação de desastres está em um data center separado e em um farm de VM praticamente idêntico, mas com os endereços IP de todas as máquinas modificados apenas ligeiramente. Se / Quando tivermos um failover completo para o outro data center, todo o software e as comunicações simplesmente "funcionarão", pois a resolução DNS sempre fornecerá o endereço correto com base no data center.
Você só precisa ter cuidado para não ter DOIS (ou mais) nomes pesquisando de um mesmo endereço IP, pois não há garantia de qual dos dois nomes será retornado - às vezes sua conexão funcionará e outras vezes não t.
Espero que isso ajude alguém com o mesmo problema!
Atenciosamente,
Dave
Ainda não tenho certeza do que você tentou, mas aqui está o link obrigatório para os documentos do MySQL sobre como o MySQL resolverá nomes de host. Especificamente:
Percebi que você está usando
slavename.internal.domain
. Eu garantiria quegethostbyaddr(ip)
no escravo resolvesse oslavename.internal.domain
, caso contrário não funcionaria.Dito isso, sempre achei a resolução de domínio um grande aborrecimento e realmente não confiável. Portanto, habilito
skip-name-resolve
o pequeno aumento de desempenho de ignorar o DNS e conceder com base em IPs.