La conexión remota al servidor MySQL lleva mucho tiempo

10

Tengo un servidor MySQL 5.0.75 ejecutándose en mi portátil Linux al que quiero conectarme desde otra máquina en la red local.

Esta conexión toma 5-6 segundos:

mysql -h 172.22.65.101 -u myuser -p123

Un ping al host 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

¿Algunas ideas? Cuando monitorizo ​​la conexión con SHOW PROCESSLIST; en el host MySQL, puedo ver que el comando es "conectar" y el usuario es "usuario no autenticado". Esto dura hasta que se establece la conexión. (El usuario se muestra como "myuser" y el comando es "sleep")

Soy desarrollador y necesito sus sugerencias sobre cómo encontrar el cuello de botella.

Mi my.cnf en el 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

Cliente:

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
Lennart
fuente

Respuestas:

17

Probablemente esté rezagado en un intento de recuperar y verificar el DNS inverso del host que se conecta. Puede probar esto activando skip_name_resolveen la [mysqld]sección my.cnf del servidor .

Si de hecho es el caso (demostrado por ese parámetro que elimina el retraso), puede resolver el problema configurando DNS correctamente (hacia adelante y hacia atrás) para el cliente, o ejecutando skip_name_resolvetodo el tiempo (lo que significa que puede No use nombres de host en sus GRANTtablas).

caos
fuente
Eso lo solucionó! Definí skip_name_resolve en el my.cnf de mi host MySQL, reinicié MySQL y el problema se resolvió. Te debo una cerveza. :)
Lennart
Contento de estar en servicio. :)
caos
1
genial, gracias! Sin embargo, para que quede claro (en caso de que alguien se equivoque como yo), es simplemente "skip_name_resolve" en una línea, no "skip_name_resolve = 1" ni nada ... ¡de lo contrario su servicio no se iniciará!
James Crowley