MySQLサーバーへのリモート接続に非常に時間がかかる


10

LinuxノートブックでMySQL 5.0.75サーバーを実行しており、ローカルネットワークの別のマシンから接続したい。

この接続には5〜6秒かかります。

mysql -h 172.22.65.101 -u myuser -p123

MySQLホストへのping:

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、

お役に立てて嬉しいです。:)
混乱

1
よかった。ありがとう!ただ明確にするために(誰かが私のように台無しになっている場合)、それは1行の "skip_name_resolve"であり、 "skip_name_resolve = 1"などではありません...そうしないと、サービスは開始されません!
James Crowley、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.