NETCREATESBLOGネットクリエイツの公式ブログ

netcreates. blogでタグ「DNS」が付けられているもの

偉大なるDNS

ドメイン ネーム システム(DNS)とは、ホスト名(www.netcreates.jpなど) に紐付く IPアドレス(例えば210.155.194.146) を検索する仕組みである。(その逆でIPアドレスからホスト名もある)

 

モデムが「ピー、ヒョロヒョロ・・・」と言っていたダイヤルアップ時代からインターネットを利用している人は、「設定する時に入力するアレね」と懐かしく感じられるかもしれませんが、最近は接続時に自動的に設定されるためDNSサーバの存在を知らない人も多いかと。

 

ぶっちゃけ、DNSサーバが無ければ例えインターネットに繋がっていても http://www.yahoo.co.jp/http://www.google.com/ も開けないので「インターネットが使えないに等しい」わけですが、本日昼前にISP(朝日ネット)側の障害でDNSサーバが一時利用不能になりました。

 

インターネットには繋がっているのにURLが開けないこのもどかしさ

 

Webサイトが閲覧できないだけならまだしも、最近はログ等にホスト名を記録しようとするソフトも多く、それらはホスト名の解決ができずにパフォーマンスが低下する始末・・・。

 

結局、他ISPに切り替えることでその場を凌ぎましたが、DNSがインターネットに関連するシステムの隅々まで影響していることを改めて実感した一日でした。

skip-name-resolveを書くとDBに接続できない場合

以前、MySQLの重さの原因はDNS逆引きだった という記事を書いたのですが、それを読んでmy.cnfにskip-name-resolveを設定したという後輩から「DBに接続できなくなった」という問い合わせを受けました。

 

話を聞いたところ、MySQLにローカル接続用のユーザを追加するとき、MySQL 権限テーブルに「localhost」と書いたとのこと。

こんな感じ

grant all privileges on DB.* to userid@’localhost‘ identified by ‘hogehoge’;

記事にも書きましたが、skip-name-resolveを使うとホスト名の解決を行わなくなりますから当然、ローカル接続も接続元が「localhost」ではなく 127.0.0.1 として扱われます

なので、MySQLをインストールしたての時など@127.0.0.1なユーザが居ない状態でいきなりskip-name-resolveを設定するとMySQLに接続できないのです・・・。

grant all privileges on DB.* to userid@127.0.0.1 identified by ‘hogehoge’;

上記のようにユーザ追加時にはIPアドレスを使用すれば大丈夫。

ただ、記事に「うちのようにlocalhostからしかMySQLを使わない場合、MySQLがDNS逆引きを行う必要は無いですし、このほうがパフォーマンスも良いみたいです。」なんて書き方をしたせいで誤解を生んだ可能性があり、申し訳ないです。

そこはlocalhostではなく「127.0.0.1」と書くべきでした。すみません。

MySQLの重さの原因はDNS逆引きだった

昨日、私的に運用しているサーバのMySQLが急に重くなり、connectできないという現象に陥りました。
原因を探ったところ、ファイアウォール側の問題でサーバからDNSの逆引きができない状態になっていて、MySQLはDNSサーバの応答をずっと待っていたためプロセス数が最大になってしまった模様。
DNS逆引きができるようになると何事も無かったかのようにMySQLが軽くなりました。

http://dev.mysql.com/doc/refman/4.1/ja/dns.html
を見ると、「–skip-name-resolve を mysqld オプションを指定して起動すると、DNS ホスト名ルックアップを無効化できます。ただし、この場合は、MySQL 権限テーブルで IP 番号しか使用できなくなります。」と書いてあるため、早速my.cnfに下記の設定を追加しました。

[mysqld]
skip-name-resolve

うちのようにlocalhostからしかMySQLを使わない場合、MySQLがDNS逆引きを行う必要は無いですし、このほうがパフォーマンスも良いみたいです。

「要らない事は行わない」のがトラブルの削減や、リソースの節約に繋がることを改めて実感しました。