ちょっと試験的にMySQLサーバを外部接続させ負荷を観測しています。
(Blogの表示も遅い時があったと思います。。。)
すぐ忘れるので、メモメモ。。。
以下の設定を仮定します。
データベース名・・・DBname
ユーザー名・・・・・・hoge
パスワード・・・・・・・hogepassword
@”%” ・・・・・・・・ ・・・全てのホストからアクセス可能
@localhost ・・・・・・サーバにログインしてからアクセス可能
@”192.168.1.2″・・・IPアドレスが192.168.1.2のホストからアクセス可能
@”Domain” ・・・・・・ホスト名やドメイン名がDomainからのアクセスが可能
mysql> grant all privileges on DBname.* to hoge@"%" identified by 'hogepassword'; Query OK, 0 rows affected (0.00 sec) mysql> select user from mysql.user where user='hoge'; +---------+ | user | +---------+ | hoge | +---------+ 1 row in set (0.00 sec) mysql> create database DBname; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | DBname | +--------------------+ 4 rows in set (0.00 sec mysql>
これで外部から接続できる、ユーザとそのユーザが使えるデータベースを作成することが出来ました。
あとは、外部からアクセスできるかチェックしてみよう。
$ mysql -h 接続先IP -u hoge -phogepassword Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 225796 Server version: 5.0.77 Source distribution Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql>
接続できない場合はiptablesなどをチェックしてください。
(デフォルトはTCP:3306)
さてここまでは、問題なかったのですが、
ルータのログを見てるとUDP:53を使いまくっていることが判明w
どうやらMySQLが名前解決しようとしているっぽい。
僕の場合は、ローカル内でやるのでIP指定して名前解決させない方法をとりました。
(それか/etc/hostsに追加しても良いかもしれません。。。)
# vi /etc/my.cnf [mysqld] skip-name-resolve #これを追加
再起動します。
# /etc/init.d/mysqld restart MySQL を停止中: [ OK ] MySQL を起動中: [ OK ]
これだけ。
この設定は内部で繋げる場合にも有効な手段だと思います。
もし、重いようでしたら試してみては如何でしょうか。
でも、MySQLへの接続許可をホスト名やドメイン名で指定した場合は、
設定しないでください。名前解決出来ずコネクションエラーします。
まぁ、個人ブログ程度では問題ないですが、
数百、数千捌こうと思ったら、Web鯖とDB鯖は別にすべきですね。
[tegaki]難しいねぇ[/tegaki]