外部からMySQLサーバに接続する

ちょっと試験的に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]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Enter code * Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.