ソースからMySQL4.1を入れたのですが、

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/05/07 13:37:57
  • 終了:2006/05/14 13:40:02

回答(4件)

id:inosisibeyan No.1

inosisibeyan回答回数211ベストアンサー獲得回数02006/05/07 14:18:38

ポイント23pt

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とソースでそれぞれインストールのパスが変わるのが、今回の不具合の原因と考えられます。

id:kunitz

ありがとうございます!

mysql.default_socket = /tmp/mysql.sock

にして、phpinfoでも値が変更されているのを確認したのですが、現象は変わらずです。

phpの--with-mysql=/usrのパスが、

/usr/local/bin/mysql

が正だったので、とりあえずそこを直してコンパイル中です。。。

2006/05/07 15:13:53
id:tadashi0805 No.2

tadashi0805回答回数287ベストアンサー獲得回数292006/05/07 17:08:20

ポイント23pt

PHPから接続するユーザとデータベースのgrant設定はありますでしょうか?

PHPから接続するのはlocalhostで、ソケット接続になりますので、grant設定もusername@'%'だけでなく、別途username@localhostが必要になります。

http://www.rfs.jp/server/mysql/02/02.html

select * from mysql.user where user='username';

のクエリで確認してください。

id:kunitz

ありがとうございます!

username@localhos

存在してるんですよ~・・・

2006/05/07 19:10:09
id:bonlife No.3

回答回数421ベストアンサー獲得回数752006/05/07 22:04:06

ポイント22pt

以下のページはすでに確認済みでしょうか。

上記のページでは

  • mysqld が動作していない。
  • 誰かが、mysqld が使用する Unix ソケット(デフォルトでは /tmp/mysqld.sock)を削除した。
  • ソケットファイルを保持しているディレクトリ、またはソケットファイル自体への読み取り権限と書き込み権限がない可能性がある。

など、いくつかの典型的な問題について説明されています。

もし未確認であれば、一通り確認してみてはいかがでしょうか。

id:kai10 No.4

kai10回答回数115ベストアンサー獲得回数32006/05/11 03:32:52

ポイント22pt

あくまで予想ですが、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 あたりにシンボリックリンクを作成すれば、何とかなるかもしれません。

http://www.mysql.gr.jp/

  • id:rubyperl
    私もSennaを使って、同様の現象が起こりました。
    私の解決方法としては、
    ・mysql_connectの引数のhost名にIPアドレスを指定することで解決しました。
    localhostの場合、hostsファイルを変更することで解決できるかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません