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.ポートの確認

デフォルトではMySQLTCPポート3306番でListenしているので、
ポートが開いているか確認。

$ netstat -tlpn

0.0.0.0:3306 〜 LISTEN xxxx/mysqld の表示があればOK。

4.ファイアーウォール設定を確認

Netfilter/iptables で、接続制限をかけていないか確認。

$ iptables -L

ここでファイアーウォールが有効になっている場合は、iptablesコマンドで制限を無効化するなどしてmysqlの通信を許可する。

参考書籍

MySQLデータベース構築バイブル
志村 和彦 松信 嘉範 池田 徹郎
毎日コミュニケーションズ
売り上げランキング: 10436

詳解 MySQL
詳解 MySQL
posted with amazlet at 08.10.25
Sasha Pachev
オライリー・ジャパン
売り上げランキング: 150756
おすすめ度の平均: 4.0
4 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 Webアプリ編 [みんなのシリーズ]
柴田 淳
ソフトバンククリエイティブ
売り上げランキング: 52952
おすすめ度の平均: 3.5
5 しなやかに学べるWeb開発のABC
2 数少ないPython図書の1つ
3 内容は入門〜入門まで。