La connessione remota al server MySQL richiede molto tempo


10

Ho un server MySQL 5.0.75 in esecuzione sul mio notebook Linux a cui voglio collegarmi da un'altra macchina nella rete locale.

Questa connessione richiede 5-6 secondi:

mysql -h 172.22.65.101 -u myuser -p123

Un ping all'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

Qualche idea? Quando controllo la connessione con SHOW PROCESSLIST; sull'host MySQL, vedo che il comando è "connetti" e l'utente è "utente non autenticato". Questo dura fino a quando non viene stabilita la connessione. (L'utente viene quindi visualizzato come "mioutente" e il comando è "sospensione")

Sono uno sviluppatore e ho bisogno dei tuoi suggerimenti su come trovare il collo di bottiglia!

My my.cnf sull'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

Server:

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

Risposte:


17

Probabilmente stai ritardando il tentativo di recuperare e verificare il DNS inverso dell'host che si connette. Puoi verificarlo accendendo skip_name_resolvenella [mysqld]sezione my.cnf del server .

Se è effettivamente il caso (dimostrato da quel parametro che elimina il ritardo), allora puoi risolvere il problema impostando il DNS correttamente (avanti e indietro) per il client o eseguendo skip_name_resolvetutto il tempo (il che significa che puoi utilizzare nomi host nelle GRANTtabelle).


Ciò l'ha risolto! Ho definito skip_name_resolve nel my.cnf del mio host MySQL, ho riavviato MySQL e il problema è stato risolto. Ti devo della birra. :)
Lennart,

Sono contento di essere al servizio. :)
caos

1
ottimo grazie! solo per essere chiari (nel caso qualcuno sbagli come me), è semplicemente "skip_name_resolve" su una riga, non "skip_name_resolve = 1" o altro ... altrimenti il ​​tuo servizio non si avvierà!
James Crowley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.