Conexão remota ao servidor MySQL leva muito tempo

10

Eu tenho um servidor MySQL 5.0.75 em execução no meu notebook Linux ao qual eu quero me conectar de outra máquina na rede local.

Esta conexão leva de 5 a 6 segundos:

mysql -h 172.22.65.101 -u myuser -p123

Um ping para o host do MySQL:

PING 172.22.65.101 (172.22.65.101) 56(84) bytes of data.
64 bytes from 172.22.65.101: icmp_seq=1 ttl=64 time=0.799 ms
64 bytes from 172.22.65.101: icmp_seq=2 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=3 ttl=64 time=6.43 ms
64 bytes from 172.22.65.101: icmp_seq=4 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=5 ttl=64 time=3.81 ms
64 bytes from 172.22.65.101: icmp_seq=6 ttl=64 time=0.706 ms
^C
--- 172.22.65.101 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5027ms
rtt min/avg/max/mdev = 0.000/1.959/6.437/2.383 ms

Alguma idéia? Quando monitoro a conexão com SHOW PROCESSLIST; no host MySQL, vejo que o comando é "connect" e o usuário é "usuário não autenticado". Isso dura até que a conexão seja estabelecida. (O usuário é exibido como "myuser" e o comando é "sleep")

Sou desenvolvedor e preciso das suas sugestões sobre como encontrar o gargalo!

Meu my.cnf no host:

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice  = 0

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
skip-federated

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[isamchk]
key_buffer = 16M

CLient:

mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Servidor:

mysql  Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2
    
por Lennart 29.05.2009 / 21:56

1 resposta

17

Provavelmente você está atrasado em uma tentativa de recuperar e verificar o DNS reverso do host de conexão. Você pode testar isso ativando skip_name_resolve na seção my.cnf, [mysqld] do servidor.

Se, de fato, for o caso (demonstrado por esse parâmetro eliminando o atraso), você poderá resolver o problema configurando o DNS corretamente (para frente e para trás) para o cliente ou executando com skip_name_resolve todo o time (o que significa que você não pode usar nomes de host em suas tabelas GRANT ).

    
por 29.05.2009 / 22:02