質問: localhostから同LAN上のMySQLサーバーへの接続が急に遅くなる お世話になっております。 上記内容にて、現在問題解決と原因究明に困っており、質問させて頂きました。 ### 前提・実現したいこと WindowsPC の localhost(Apache2.2)環境にて、PHPアプリケーションの開発をしております。 DBサーバーとして利用しているのは、同LAN上に存在するLinux(CentOS)端末にあるMySQLを使用しています。 いつものように、アプリケーションの動作を確認する為にlocalhost接続でいつものように操作しておりましたが ある日から、DB関連の処理が走る時に、リクエストが帰ってくるまでの時間が極端に遅くなりました。 ※とても遅くなるだけで、処理自体は完遂してくれます。 DB処理を行わない、http のみのリクエストはいつも通りの速度でした。 DBサーバーであるLinux端末のreboot, mysqlサービスの再起動を行いましたが特に改善せず。 今までは、特に意識せず普通に使えていただけに、原因がわからず困っています。 現在は下記の「試したこと」の内容で応急処置として改善していますが 今までは、このような設定などを意識せずに普通に使えていたので 「ある日突然遅くなる」という状況が理解できず、経験者の方の意見が頂きたく思います。 また同じような経験がある方で「こんな方法で改善した」という方がいらっしゃったら、教えて頂ければ幸いです。 Linux(LANP)環境の知識・経験にも乏しく 下記のような設定がごく一般的である場合は、ご指摘頂ければ幸いです。 よろしくお願い致します。 ### 試したこと・調べたこと ``` 色々と、Googleを使って調べていたら 【MySQLのDNS逆引き】 というキーワードが引っ掛かり /etc/sysconfig/network-scripts/ifcfg-ethX の設定からDNSを使用しないように設定を変更し「networkをrestart」したところ レスポンス速度としては、以前と同じような形になり改善しました。 しかし、DNSを無効化した影響で sendmail が失敗するようになりました(当たり前ですが) それでは困るので、DNS無効化を解除した上で、 /etc/hosts にMySQLに接続してくるPCの ipアドレス(ipv4)を追記し「networkをrestart」したところ、 hosts に設定したPCからのレスポンス速度は、一応改善されました。 現在は、上記の内容で応急処置としております。 ``` ### MySQLのユーザーについて ``` 関係あるかわかりませんが・・・ 開発中のため、特に権限設定など行わず ホスト:% に ALL 権限を与えております。 ``` ### 補足情報 どんな情報を提供すれば良いのかすらあやふやです。 ご指摘頂ければ、情報を追加致します。
回答: --skip-name-resolve オプションをmysqld起動時のオプションに加える。 MySQLと名前解決 MySQLにおいて名前解決は,コネクションの確立・認証のフェーズで利用されます。デフォルト(名前解決が有効)な場合のシーケンスはざっくりと以下のようになります。 1. IPアドレスがMySQL内の名前解決キャッシュに載っているかどうかを確認する 2. IPアドレスからホスト名に逆引きをかける(getnameinfo) 3. 得られたホスト名を正引きし,IPアドレスを得る(getaddrinfo) 4. 検証に成功した場合,これ以降の「接続元ホスト」はIPアドレスまたはホスト名の 「検証に成功したどちらか一方」を利用する 5. ユーザー名,パスワードなどの認証に進む 名前解決が無効(skip-name-resolveオプションが有効)な場合, 上記1,2,3のフェーズがスキップされ,4で検証される対象はIPアドレスのみとなります。