Die Remoteverbindung zum MySQL-Server dauert sehr lange


10

Auf meinem Linux-Notebook läuft ein MySQL 5.0.75-Server, zu dem ich von einem anderen Computer im lokalen Netzwerk aus eine Verbindung herstellen möchte.

Diese Verbindung dauert 5-6 Sekunden:

mysql -h 172.22.65.101 -u myuser -p123

Ein Ping an den MySQL-Host:

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

Irgendwelche Ideen? Wenn ich die Verbindung mit SHOW PROCESSLIST überwache; Auf dem MySQL-Host kann ich sehen, dass der Befehl "connect" und der Benutzer "nicht authentifizierter Benutzer" ist. Dies dauert so lange, bis die Verbindung hergestellt ist. (Der Benutzer wird dann als "myuser" angezeigt und der Befehl lautet "sleep".)

Ich bin Entwickler und brauche Ihre Vorschläge, wie Sie den Engpass finden können!

Meine my.cnf auf dem 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

Klient:

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

Antworten:


17

Wahrscheinlich verzögern Sie den Versuch, das Reverse-DNS des Verbindungshosts abzurufen und zu überprüfen. Sie können dies testen, indem Sie es skip_name_resolveim [mysqld]Abschnitt my.cnf des Servers aktivieren .

Wenn dies tatsächlich der Fall ist (dies wird durch diesen Parameter demonstriert, der die Verzögerung beseitigt), können Sie das Problem lösen, indem Sie entweder DNS ordnungsgemäß (vorwärts und rückwärts) für den Client einrichten oder die skip_name_resolveganze Zeit ausführen (was bedeutet, dass Sie dies können) Verwenden Sie keine Hostnamen in Ihren GRANTTabellen.


Das hat es behoben! Ich habe skip_name_resolve in der my.cnf meines MySQL-Hosts definiert, MySQL neu gestartet und das Problem wurde behoben. Ich schulde dir etwas Bier. :)
Lennart

Stehe gerne zur Verfügung. :)
Chaos

1
grosses Dankeschön! Nur um klar zu sein (falls jemand wie ich es vermasselt), es ist einfach "skip_name_resolve" in einer Zeile, nicht "skip_name_resolve = 1" oder so ... sonst wird Ihr Dienst nicht gestartet!
James Crowley
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.