MySQLで外部から接続するときにチェックする項目
サーバーにMySQLを入れたけど、外のマシン(ネットワーク)から接続できないよ!って時は以下の内容をチェックしてみる。
1. mysqldのuserテーブルの設定
以下コマンドでユーザの権限状態を確認。
$ mysql -u root mysql mysql> select user, host, password from user;
権限が無い場合はGRANTコマンドで、外部からの接続を許可すること。
mysqlユーザの追加方法、GRANTの使用法等参照。
2.my.cnfのbind-address設定
my.confのbind-addressの設定を確認してみる。
$ vi /etc/mysql/my.cnf bind-address = 127.0.0.1 bind-address = (接続したいマシンのIPアドレス)
追加したい接続先のIPを書いた「bind-address」を追加していけばOK。
どのIPからも接続許可する場合はbind-addressをコメントアウトすればOK。
3.ポートの確認
デフォルトではMySQLがTCPポート3306番でListenしているので、
ポートが開いているか確認。
$ netstat -tlpn
0.0.0.0:3306 〜 LISTEN xxxx/mysqld の表示があればOK。
4.ファイアーウォール設定を確認
Netfilter/iptables で、接続制限をかけていないか確認。
$ iptables -L
ここでファイアーウォールが有効になっている場合は、iptablesコマンドで制限を無効化するなどしてmysqlの通信を許可する。
Pythonで簡易CGIサーバーを利用する
Python2.4でのお話。
PythonにはCGIHTTPServerというCGIを動作確認できるクラスがあります。
Python 2.4以上の場合
$ python -m CGIHTTPServer
Python 2.3以前の場合(2.4でも使えます)
import CGIHTTPServer CGIHTTPServer.test()
CGIHTTPServerを立ち上げるとローカルホストの8000番ポートが開き、CGIが動かせるHTTP Serverが走り、ブラウザで下記のようにURLへアクセスすることでCGIを実行できます。
http://localhost:8000/cgi-bin/hoge.py
hoge.py
スクリプトはこんな感じ。
#!/usr/bin/python # -*- coding: utf-8 -*- print "Content-type: text/html" print print "<html>" print "<center>hogehoge</center>" print "</html>"
また、このCGIHTTPServerですが、通常はPythonコマンドを叩いた際にいたディレクトリがルートディレクトリとなり、起動したルートディレクトリ以下にある'/cgi-bin'、もしくは'/htbin'直下にPythonスクリプトを置くことになります。
例えば
c:/workspace/myPyProject/にいる場合に、ここでCGIHTTPServerを立ち上げます。
c:/workspace/myPyProject/cgi-bin/hoge.pyに置いているスクリプトは、
http://localhost:8000/cgi-bin/hoge.py
のURLで動かせます。
c:/workspace/myPyProject/htbin/hoge.pyに置いているスクリプトは、
http://localhost:8000/htbin/hoge.py
のURLで動かせます。
しかし、
c:/workspace/myPyProject/cgi-bin/dir1/hoge.py
のようにひとつ階層が深くなると403のパーミッションエラーで、
Message: CGI script is not a plain file ('/cgi-bin/dir1').
てな感じで怒られちゃいます。
まぁ、ここで諦めてApacheで動かせばいいんですが、どうしてもCGIHTTPServerで動かしたい場合はサーバー起動時のスクリプトを以下のように変更します。
import CGIHTTPServer CGIHTTPServer.CGIHTTPRequestHandler.cgi_directories = ['/htbin', '/cgi-bin/dir1'] CGIHTTPServer.test()
ってな感じにしちゃえばOKです。
ここで注意することがひとつあって、タプルの内容を
['/cgi-bin', '/htbin', '/cgi-bin/dir1']
のように元の'/cgi-bin'設定が有効になっていると、子階層を指定している'/cgi-bin/dir1'が有効にならなくて、CGIが動いてくれないようです。
参考サイト
Pythonで超簡単にCGIの動作を確認する方法 -- TRIVIAL TECHNOLOGIES 2.0 --
CGIHTTPServer -- Python ライブラリリファレンス --