こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHPからMySQLに接続することができません。

PHPからMySQLに接続することができません。
解決方法をご存じの方は教えていただけないでしょうか。

PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13)

環境
OS:CentOS 5.3
DB:Mysql 5.0.67(ソースからインストール)
Web:Apache

PHPのソースの一部を以下に記します。

  $db_host = 'localhost';//DB_NAME;
  $db_user = 'user';//DB_USER;
  $db_pass = 'pass';//DB_PASS;

  $db = mysql_connect($db_host,$db_user,$db_pass);

以下の方法も試したのですが、エラーメッセージは変わりませんでした。

  $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd")

端末のコマンドからMySQLへの接続は成功します。
ホスト名、ユーザー名、パスワードも上記と同一のものです。

  $ /usr/local/mysql/bin/mysql -h localhost -u user -p
  Enter password:pass

以上です。宜しくお願いします。

投稿日時 - 2010-08-17 09:40:20

QNo.6115024

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

こんにちは。

済みません、もうひとつ・・・。
mysqladmin パスワード --socket=/tmp/mysql.sock version
ってやったら、どうなりますか?

投稿日時 - 2010-08-18 15:40:55

ANo.3

こんにちは。

MySQLはどうやって入れたんですかね?
mysql_config --socket
とやったら、なんて表示されますか?
また、
mysqladmin パスワード version
とやったら、
UNIX socket /var/lib/mysql/mysql.sock
のところはなんて表示されますか?

ちなみに私は全部yumですが・・・、
/var/lib/mysql/mysql.sock
と表示されます。

「/etc/my.cnf」の中も、ここを指定しています。
「/etc/php.ini」の設定は空白ですが、この場合、デフォルト(mysql_config)の値を見るようです。
逆に「php.ini」でのソケット指定は不具合が多いとの事で・・・。

投稿日時 - 2010-08-18 15:36:41

ANo.2

こんばんは。

実際にmysql.sockが存在する場所は?

my.cnfの[mysqld]が、
socket=/tmp/mysql.sock
になっている?

php.iniの、
mysql.default_socket = ???
これは?

/var/mysqlのパーミッションはどうですか?
PHPが読み書きできない?

yumで入れたら楽だったのに・・・。

投稿日時 - 2010-08-17 20:17:16

補足

yumでのインストールですが、
今回は既存のシステムと同一の環境が欲しいと客先に言われておりまして、
yumではインストールしないで欲しいと言われてしまいました。

なので、yumでのインストールはできない状態です。

投稿日時 - 2010-08-18 09:15:51

お礼

情報ありがとうございます。
インラインで失礼致します。

>実際にmysql.sockが存在する場所は?
→/tmp/mysql.sock です。

>my.cnfの[mysqld]が、
>socket=/tmp/mysql.sock
>になっている?
→clientもmysqldもなってます。

>php.iniの、
>mysql.default_socket = ???
>これは?
→空欄になっていました。
 以下のように変更しました。
 mysql.default_socket = /tmp/mysql.sock

>/var/mysqlのパーミッションはどうですか?
>PHPが読み書きできない?
→所有者はmysqlユーザーで、グループがrootになっておりました。
 権限はdrwx------となっておりました。
 権限をdrwxrwxrwxへ変更しました。
 グループをmysqlへ変更しました。

上記を変更し、httpdとMySQLを再起動しましたが、
結果は変わりませんでした。

>yumで入れたら楽だったのに・・・。
→先方から細かい指示がありまして。。。
 後で試してみます。

投稿日時 - 2010-08-17 21:32:27

ANo.1

エラーメッセージをグーグル先生に聞いたところ、参照URLに詳しく書いてありましたので、ご参照してみてください。

参考URL:http://www.hi-ho.ne.jp/tsumiki/book_sup2.html

投稿日時 - 2010-08-17 10:31:23

お礼

情報ありがとうございます。

頂いたURLを参照し、以下を確認しました。

1.MySQLサーバーが起動していない
  →確認したところ起動していました。

2.MySQLサーバーで使っているUNIXソケットとクライアントソフトで使っているUNIXソケットのパスが違う
  →usr/local/mysql/var/my.cnf を確認したところ、
   mysqld、clientとで、同一ディレクトリのmysql.sockを参照していました。

3.なんらかの理由でソケットファイルが削除されている
  →2,で参照されているディレクトリから確認したところ、mysql.sockファイルの存在を確認しました。
  内容を確認しようとしたところ、所有者ユーザー、rootユーザー共に、
  viewコマンドで閲覧ができませんでした。([Permission Denied])

未だにPHPからの接続ができていない状態です。

投稿日時 - 2010-08-17 13:32:55

あなたにオススメの質問