PHPのmysql_connectで繋がらなくて困っています。
解決方法を教えてください。
現象は下記です。
【現象】
◆テストスクリプト
test.php
>>
<?php
$db_param = array(
"HOST" => "localhost",
"USER" => "username",
"DBNAME" => "dbname",
"PASSWORD" => "passwd",
);
mysql_connect($db_param['HOST'] , $db_param['USER'], $db_param['PASSWORD'])
or die("Could not connect MySQL server");
mysql_select_db($db_param['DBNAME'])
or die("Could not select database");
?>
<<
◆エラー内容
http://example.com/test.php
で、
Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) in /path/test.php on line 11
Could not connect MySQL server
◆補足
mysql -u root -p
などでは繋がります。
◆環境
CentOS4
MySQL4.1.19
↓を参考に入れました。sennaを組み込んでいます。
http://qwik.jp/senna/install.html
PHP 5.1.2
Apache2
mysql.default_socket = /var/lib/mysql/mysql.sock
という実際に使用するソケットのパス指定の一行が、php.iniに入っていれば、ソースからmakeした場合でも使えます。
参考までに
変更した場合の元のファイルが/etc/php.ini.rpmsaveなどのファイル名になってデフォルトではあるようですので、ご自分の環境で見つけて見てください。元の状態というのもかなり参考になるものです。
http://dev.mysql.com/doc/refman/4.1/en/problems-with-mysql-sock....
mysqlの仕様で、rpmとソースでそれぞれインストールのパスが変わるのが、今回の不具合の原因と考えられます。
PHPから接続するユーザとデータベースのgrant設定はありますでしょうか?
PHPから接続するのはlocalhostで、ソケット接続になりますので、grant設定もusername@'%'だけでなく、別途username@localhostが必要になります。
http://www.rfs.jp/server/mysql/02/02.html
select * from mysql.user where user='username';
のクエリで確認してください。
ありがとうございます!
username@localhos
存在してるんですよ~・・・
以下のページはすでに確認済みでしょうか。
上記のページでは
など、いくつかの典型的な問題について説明されています。
もし未確認であれば、一通り確認してみてはいかがでしょうか。
あくまで予想ですが、mysql.soで参照している、mysqlのライブラリのパスがあってないためではないでしょうか。
% ldd /usr/lib/php5/lib/php/extensions/.../mysql.so
を実行したときに、
libmysqlclient.so.15 => not found
というように、「not found」があると、ライブラリが参照できていない状態です。
その場合、php の再コンパイルが必要になります。
あるいは、libmysqlclient.so.15 が、MySQLをインストールしたディレクトリの lib 配下にあると思うので、/usr/lib あたりにシンボリックリンクを作成すれば、何とかなるかもしれません。
ありがとうございます!
mysql.default_socket = /tmp/mysql.sock
にして、phpinfoでも値が変更されているのを確認したのですが、現象は変わらずです。
phpの--with-mysql=/usrのパスが、
/usr/local/bin/mysql
が正だったので、とりあえずそこを直してコンパイル中です。。。