MySQL 서버에 대한 원격 연결에 시간이 오래 걸림


10

로컬 노트북의 다른 컴퓨터에서 연결하려는 Linux 노트북에서 실행되는 MySQL 5.0.75 서버가 있습니다.

이 연결에는 5-6 초가 걸립니다.

mysql -h 172.22.65.101 -u myuser -p123

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

어떤 아이디어? SHOW PROCESSLIST와의 연결을 모니터링 할 때; MySQL 호스트에서 명령이 "connect"이고 사용자가 "인증되지 않은 사용자"임을 알 수 있습니다. 연결이 설정 될 때까지 지속됩니다. (사용자는 "myuser"로 표시되고 명령은 "sleep"입니다.)

저는 개발자이며 병목 현상을 찾는 방법에 대한 제안이 필요합니다!

호스트의 my.cnf :

[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

고객:

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

섬기는 사람:

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

답변:


17

아마도 연결 호스트의 역방향 DNS를 검색하고 확인하려는 시도가 지연되고 있습니다. skip_name_resolve서버의 my.cnf [mysqld]섹션 에서 켜서 테스트 할 수 있습니다 .

실제로는 지연을 제거하는 해당 매개 변수로 표시되는 경우 클라이언트에 대해 DNS를 올바르게 설정 (전진 및 역방향)하거나 skip_name_resolve항상 실행하여 문제를 해결할 수 있습니다. GRANT테이블 에서 호스트 이름을 사용하지 마십시오 ).


그것은 그것을 고쳤다! MySQL 호스트의 my.cnf에서 skip_name_resolve를 정의하고 MySQL을 다시 시작하면 문제가 해결되었습니다. 나는 당신에게 맥주를 빚지고 있습니다. :)
Lennart 2016 년

봉사하게되어 기쁘다. :)
chaos

1
감사합니다! 그래도 명확하게 말하면 (누군가가 나처럼 엉망인 경우) "skip_name_resolve = 1"이 아닌 한 줄에 단순히 "skip_name_resolve"입니다 ... 그렇지 않으면 서비스가 시작되지 않습니다!
James Crowley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.