« 2009年09月 | メイン | 2010年08月 »

2010年04月05日

Windows Server, MySQL+PHPで Can't connect to MySQL server on 'localhost' (10061) のエラー

先日、珍しくWindows Serverのインフラ構築を行ったときにハマったこと。
Windows ServerでXoopsを動かすということで、構成は、Windows Server 2008 Standard SP2 32bit + IIS 7.0 + FastCGI + MySQL 5.0.90 + PHP 5.2.12(Non-thread-safe) でした。

インストーラ(.msi)でMySQLサーバをインストールし、PHPもインストールして、MySQLサーバに接続する下記のようなPHPスクリプト <DocumentRoot>/connecttest.php を用意しました。

<?php
mysqli_connect("localhost","<user>","<password>") or die("Error MySQL First Test");
echo "Success MySQL First Test";
?>

ブラウザから http://localhost/connecttest.php にアクセスしてみたところ、何度試しても「Can't connect to MySQL server on 'localhost' (10061)」のエラーとなってしまうのです。
php.iniの内容や、libmysql.dllの置き場所やPHPの各種dllの置き場所も確認しましたが、特に問題なさそうです。

4時間ぐらいかかってやっとわかった原因は、MySQLサーバがTCP/IPのアクセスを禁止するモード(skip-networking)で動作していた、ということでした。
コマンドプロンプトから、'telnet localhost 3306' とやっても'Connection refused'だったので、そこからたどって気づきました。

my.iniで、skip-networkingをコメントアウトし、ポート番号も3306を指定してMySQLを再起動したところ、やっと正常に「Success MySQL First Test」と表示されるようになりました。

-- my.ini
#skip-networking
#port=0
port=3306

...
--

MySQLサーバのインストールの際、Configurration Wizardで、「Enable TCP/IP Networking」という設定箇所があったのですが、ここで「ローカルからしかアクセスしないから」ということで何を思ったのか、チェックボックスをわざわざOFFにしてしまったのが失敗でした。
デフォルトのままインストールしていれば、こんなことにはならなかったはずです。

「Can't connect to MySQL server on 'localhost' (10061)」
でググってみたらいろんな方が質問を投げているのですが、解決例は少ないようですね。
「libmysql.dllの場所が適切ではない」
「パスにphpのディレクトリを追加すべき」
という回答があったりしますが、MySQLクライアントのエラーメッセージが出力されているということは、少なくとも、PHPスクリプトを起動してMySQLクライアントモジュールを使用したということを表しています。
上記2つの回答についてはすでにクリアしている問題で、原因は他にあるということですね。

同じエラーメッセージが出て悩んでいる方は、念のため、my.iniでskip-networkingが記載されていないか、ポート番号(port)が3306か、を確認されるとよいと思います。

なお、MySQL, IISと連携する際のPHPの設定については、下記がとても参考になりました。

・IISにOSSをインストールするための情報サイト [IIS de OSS 64bit]
http://guitarfish.wazure.jp/index.php?PHP5.2.11%E3%81%AEphp.ini%E7%B7%A8%E9%9B%86

2010年04月02日

つれづれ

ブログの更新が滞っている間に社内の組織変更があり、所属部署が社内外のインフラ構築を担当する「インフラ構築グループ」に変更となりました。
そのものずばりのネーミングです。

また、弊社は2月にプライバシーマーク付与の認定を受けました。
僕も社内ワーキンググループの一員として個人情報保護マネジメントシステムの運用にも関わっているので、うれしい限りです。
当社は、今後もプライバシーマーク認定事業者として、個人情報の適切な保護管理に取り組みます。

http://antas.jp/modules/news/article56.html