- 締切済み
MySQLは起動しているが、PHPから接続できない
WEBサービスの動作確認用に自宅PCにテスト環境を構築しました。システムのバージョンは下記の通りです。すべて、同一マシンのCドライブのデフォルトのフォルダにインストールされています。 OS:WindowsXP sp3 Apache2.2 PHP5.2 MySQL5.5 先ず、phpinfo()で確認したところ、図の通りmysql,mysqli関係のエクステンションは読み込まれています。 次に、MySQL自体はサービス一覧でも起動しているし、コマンドプロンプトからも起動できます。 ポートはmy.iniで3306に設定していますが、XPのファイヤーウォールは例外設定しているし、ファイヤーウォール機能のあるアンチウイルスソフトはインストールしていません。 MySQLフォルダの中にあるmy-small.ini~my_huge.inを確認したところ、"#skip-networking"とコメントアウトされています。 試しに、"telnet localhost 3306"をやると、謎の文字列が出てきて、しばらく後に「接続が切断されました」となります。これって繋がってるって事ですよね? PHPスクリプトは下記の通りです。 <?php $link=mysql_connect('localhost','root','root')or die("MySQLと接続できません"); ?> ところが結果は、下記の通りのエラーが出て繋がりません。 Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10061) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\myconnect_test.php on line 2 MySQLと接続できません 英語のドキュメントを含めて、ネット上をかなり捜しましたが、他に原因となるような事は見つかりませんでした。 これまで過去のバージョンを含め、MySQLやPHPを何度かインストール/アンインストールを繰り返したので、昔の設定ファイルが残っているのか?とも思いましたが、WINDOWSフォルダにそれらしいものは見つかりませんでした。 もうお手上げ状態ですが、何か見落としていますでしょうか?
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- satomi3951
- ベストアンサー率71% (98/137)
うーん、後は、xamppとか入ってて、別のPHPや別のMySQLが入ってる可能性くらいしか思いつかないなぁ
- gtx456gtx
- ベストアンサー率18% (194/1035)
>root(root)でmysqlに入って、 >「GRANT ALL PRIVILEGES ON *.* TO phpuser IDENTIFIED BY 'php' 」 >などと新規ユーザーを登録しました。 「新規ユーザーを登録」は間違いで、phpuserに権限を与えているコマンドで、パスワード設定ではないです。 「Passwordを聞かれたときに何も入れなければ入れます」との事なので、phpuserは「空のパスワード」ですね ^ ^; >念のため「select user, password from mysql.user」で確認すると、ちゃんとphpuserが登録されています。 >パスワードは暗号化されていますが、"php"の事でしょう。 ---- >ところが、一旦exitした後「mysql -u phpuser -p」で入り直そうとすると、 >「Access denied for user for 'phpuser'@'localhost'....」 >と拒絶されてしまいます。 >もしPasswordを聞かれたときに何も入れなければ入れます。 「mysql -u phpuser -p」で「php」というパスワードを入れた時に上記のエラーなら・・・単純にパスワードが間違って発生したエラーなので、正しい「空のパスワード」で正常にコネクトすると思います。 上記ことを踏まえると 「mysql_connect('localhost','root','root')」を 「mysql_connect('localhost','phpuser','')」と書き換えるとPHPもエラーなくコネクトできるように思います。
補足
>「新規ユーザーを登録」は間違いで、phpuserに権限を与えているコマンドで、パスワード設定ではないです。 これって、権限を与えつつ新規ユーザーを登録する、というコマンドではないのですか? 実際にphpuserという新規ユーザーは出来てるし、mysql.userテーブルを見ると、暗号化されたパスワードも設定されています。 何れにせよ「mysql_connect('localhost','phpuser','')」でもダメでした。ためしにパスワードの所に'php'を入れてもダメです(同じエラーです)。 そもそも、もしユーザー名やパスワードの誤りなら、エラーメッセージは「Access denied user 'phpuser'...」とかになるのではないでしょうか?
- satomi3951
- ベストアンサー率71% (98/137)
phpinfoの結果、mysqli.default_portは3306になっていますが、 mysql.default_portはNo Valueになってません? $link=mysql_connect('localhost:3306','root','root') にするか $link=mysqli_connect('localhost','root','root') にしたらどうなりますか? あるいは、php.iniのmysql.default_portを設定するか、 システム環境変数で、MYSQL_TCP_PORTを設定するか、 /etc/servicesのmysql-tcpエントリを設定・・・ってWindows版はservices見てくれるのか不明だけど。
補足
>mysql.default_portはNo Valueになってません? なってます(見えにくくてすみません)。 「mysql.default_port=3306」でやってみたこともあるんですが、だめでしたね。 「mysqli_connect()」もやはり駄目です。同じ結果です。 >システム環境変数で、MYSQL_TCP_PORTを設定… MYSQL_TCP_PORTという変数を新たに設定して、値を3306にするって事ですよね?…やってみましたが駄目でした。 >/etc/servicesのmysql-tcpエントリを設定・・・ すみません。意味が良くわからなかったのでやってません(^^; 因みにservicesの一覧にはMySQLはちゃんと出てきて「開始」してますよ。
- gtx456gtx
- ベストアンサー率18% (194/1035)
>$ mysql -u user -p >Enter Password: (パスワード) >mysql> >mysql> exit; <- mysqlの終了 >これは正しく作動します。 上記のコマンドでインストールしたMySQLが、ユーザ「user」で動作確認ができたことを確認しという意味あります。 192.168.1.1のホストへIPアドレス指定で接続を行ってIP関係のセキュリティを確認 $ mysql -u user -p -h 192.168.1.1 参照 http://www.atmarkit.co.jp/flinux/rensai/mysql03/mysql03.html > <?php > $link=mysql_connect('localhost','root','root')or die("MySQLと接続できません"); > ?> localhostで接続しているので、「>$ mysql -u user -p」が成功するなら「'root','root'」が間違っているという結論なんですが・・・rootというユーザが問題かもしれません。 特権ユーザrootなので、アプリケーション側でブロックしている可能性もあるので phpuser など、一般ユーザを作成して「>$ mysql -u phpuser -p」などで確認しては如何ですか?
補足
>「>$ mysql -u user -p」が成功するなら「'root','root'」が間違っているという結論なんですが・・・ すみません。"user"のところは書き換えるのが前提だと思ったので、"root"にしてやりました。 もし"user"をそのままつかって入力し、Passwordを聞かれたらそのままブランクでEnterすると何故かmysqlには入れますね。 >phpuser など、一般ユーザを作成して「>$ mysql -u phpuser -p」などで確認しては如何ですか? root(root)でmysqlに入って、 「GRANT ALL PRIVILEGES ON *.* TO phpuser IDENTIFIED BY 'php' 」 などと新規ユーザーを登録しました。 念のため「select user, password from mysql.user」で確認すると、ちゃんとphpuserが登録されています。パスワードは暗号化されていますが、"php"の事でしょう。 ところが、一旦exitした後「mysql -u phpuser -p」で入り直そうとすると、 「Access denied for user for 'phpuser'@'localhost'....」 と拒絶されてしまいます。もしPasswordを聞かれたときに何も入れなければ入れます。 あまりコマンドラインでDBを操作したことは無いのですが、どういうことだかさっぱりです(^^;
- gtx456gtx
- ベストアンサー率18% (194/1035)
>「コマンド・レベルで接続」とはどういう意味でしょうか? UNIXの例ですが・・・ 下記のようなコマンドでMySQLをインストールしたサーバで操作します。 ユーザとして「user」が作成されてパスワードとして「(パスワード)」が設定されている場合、 >$ mysql -u user -p >Enter Password: (パスワード) >mysql> >mysql> exit; <- mysqlの終了 >$ 上記のコマンドで、MySQLが正しくインストールされていて、ユーザ「user」とパスワード「(パスワード)」が正しく登録されていることを確認します。 MySQLがインストールされているサーバで実行すると内部ループで実行するのでセキュリティでブロックされることは少ないです。 次に、同じネットワークにある別なサーバからIPアドレスで同じコマンドを実行して、適切なネットワーク上のセキュリティが設定されることを確認します。 最後にPHPなどのアプリケーション経由でMySQLが接続できることを確認
補足
>$ mysql -u user -p >Enter Password: (パスワード) >mysql> >mysql> exit; <- mysqlの終了 これは正しく作動します。 >同じネットワークにある別なサーバから… については、自宅にあるのはこのマシンだけなので、残念ながら試せません。
- nora1962
- ベストアンサー率60% (431/717)
php.exeにパスが通っている状態で、以下の内容を「test.php」と名前をつけて「php test.php」を実行するとメッセージは変わりますか? <?php if( $cn=mysql_connect( "localhost", "root", "root" ) ){ echo "coonect success!"; }else{ echo "cannot connect!"; } ?>
補足
>php.exeにパスが通っている状態で というのは、システム>詳細設定>環境変数>システム環境変数>Pathの事でしょうか? ではれば"C:\php"を追加しています(ここにphp.exe他、PHP一式入ってます)。 上記のスクリプトですが、そのまま作って試しましたが、メッセージは同じでした。 mysql_connect()が機能しないのだから、結果は同じだと思いますが。
- satomi3951
- ベストアンサー率71% (98/137)
> ポートはmy.iniで3306に設定していますが、 中略 > Can't connect to MySQL server on 'localhost' (10061) とあるように、ポート10061に接続しようとしていますよね。
補足
10061というのはポートの事ではなく、「Mysql未起動、ホストに到達できない」という意味のエラーコードのようです。 http://q.hatena.ne.jp/1162342259(一番下の回答)
- gtx456gtx
- ベストアンサー率18% (194/1035)
MySQLにコマンド・レベルで接続したら・・・どうなりますか? >もうお手上げ状態ですが、何か見落としていますでしょうか? PHPからの接続を確認する前に「MySQLにコマンド・レベル」での接続を確認し、その後 PHPで確認するという手順で確認ですね
補足
すみません「コマンド・レベルで接続」とはどういう意味でしょうか? コマンドプロンプトで"mysql"と入れたら接続できますが、それとは違うのでしょうか?
補足
xamppは入れたことはありませんが、過去にインストールした別のPHPやMySQLが残ってる可能性はありますね。 しかし、Program FilesやWindowsフォルダをざっと見てみたんですが、それらしいファイルは発見できず。特にMySQLは昔と今とでファイル構成が変わってるので、昔何処に何があったか良くわかりません。