web-dev-qa-db-ja.com

警告:mysql_connect():[2002]そのようなファイルやディレクトリがない(unix:///tmp/mysql.sock実際に接続している)

私は私のApple(Terminal with PHP)のターミナルで私のMySQL DBに接続しようとしています。

昨日それはうまくいった、そして今私は突然タイトルの誤りを得た。

スクリプトを実行するために私のブラウザを使っているとき(XAMPPがインストールされているとき)にはうまくいきますが、TerminalはDBへの接続を拒否します。

これは私が接続するためにインクルードするファイルです(私がこれをインクルードしないときスクリプトは機能しますが、それからそれはDBに接続しません):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

それは私のブラウザで動作するので、それは動作するはずです。

私がターミナルで使用するコマンドはphp scriptname.phpです。

238
Nr 28

何らかの理由で、OS X上のmysqlは必要なソケットファイルの場所を少し間違ったものにしますが、ありがたいことにその解決策はシンボリックリンクを設定するのと同じくらい簡単です。

あなたは/tmp/mysql.sock/var/mysql/mysql.sockのようなソケット(長さ0のファイルとして表示される)を持っているかもしれませんが、1つ以上のアプリがそれのために他の場所を探しています。このコマンドで調べてください。

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

ソケットを移動するのではなく、設定ファイルを編集し、編集したファイルをパスが正しいサーバーから離れた場所に保存するのを忘れずに、シンボリックリンクを作成して、間違った場所を探している場合でも必要なソケットを見つけます!

/tmp/mysql.sockがあるが/var/mysql/mysql.sockがない場合.

cd /var 
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /tmp/mysql.sock mysql.sock

/var/mysql/mysql.sockがあるが/tmp/mysql.sockがない場合.

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

ディレクトリとリンクを作成するには権限が必要ですので、必要に応じて上記のコマンドの前にSudoを付けてください。

412
Brian Lowe

私もこのエラーを抱えていましたが、提案を通してしか直すことができませんでした ここ

要約すると、

127.0.0.1

の代わりに:

localhost

その理由は、 "localhost"はMySQLドライバの特別な名前であり、TCPソケットの代わりにUNIXソケットを使用してMySQLに接続するためです。

358
luismreis

私は同じ問題を抱えていました、そして、これは私がそれを直した方法です:

私はこれを持っていました、そしてそれはうまくいきませんでした:

$con = mysql_connect('localhost', 'root', '1234');

私はこれをしました、そしてそれはうまくいきました:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

Mysqlサーバーを使用する代わりに、私は直接Unix Socketに接続しました。私のために働きました。

23
Caio

MySQLソケットは通常/tmp/mysql.sockまたは/var/mysql/mysql.sockにありますが、おそらくPHPは間違った場所に見えます。

  1. ソケットの位置を確認してください。

     Sudo /usr/libexec/locate.updatedb
    
  2. Updatedbが終了した場合

     locate mysql.sock
    
  3. それからphp.iniを探します。

     php -i | grep php.ini
    

    これは以下のように出力されます。

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
    
  4. Php.iniを編集してください

     Sudo vim /opt/local/etc/php54/php.ini
    
  5. 行を変更します。

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock
    

    /tmp/mysql.sockはソケットへのパスです。

  6. 変更を保存してESC + SHIFTを終了します。x

  7. Apacheを再起動します

     Sudo apachectl stop
     Sudo apachectl start
    
21
noun

私はMac OS X上のXAMPPを使っています、そして上記のBrian Loweの解決策は少し修正を加えたものです

Mysql.sockファイルは、実際には "/ Applications/xampp/xamppfiles/var/mysql /"フォルダにあります。そのため、/ tmpと/ var/mysqlの両方でリンクする必要がありました。どのコマンドがPHPコマンドラインで使用されているか確認していませんが、これで修正されたので、嬉しいです:-)

Sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
11
Nirav Mehta

Mac OS X EL Capitan + MAMP Pro

cd /var
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

それからこれをしなさい

cd /tmp
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

これが時間を節約することを願っています。

10
Jsonras

その理由は、phpがmysql.sockの正しいパスを見つけられないためです。

Mysqlが最初に実行されていることを確認してください。

次に、どのパスがmysql.sockであるかを確認してください。たとえば、/tmp/mysql.sock

次に、このパス文字列をphp.iniに追加します。

  • mysql.default_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

最後に、Apacheを再起動してください。

6
brucenan

次の問題に直面したとき:

PHPでエラーが発生しました "警告:mysql_connect() http://function.mysql-connect :2002そのようなファイルやディレクトリはありません(unix:/// tmp/mysql経由で接続しようとしています。靴下)"

/etc/php.iniの "mysql.default_socket"の値を

 "mysql.default_socket = /var/mysql/mysql.sock". 

その後、サーバー管理でWebサービスを再起動します

6
cristian

MySQLがソケットを配置する場所とOSXがそれを想定している場所をリンクしている2002年ソケットエラーの修正/サーバー通信。

Sudo mkdir /var/mysql

その後

Sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

ソース: http://coolestguidesontheplanet.com/get-Apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

2
kingus

私は同じ問題を抱えていた

[PDOException] SQLSTATE [HY000] [2002]そのようなファイルまたはディレクトリはありません

[ErrorException]警告:PDO :: __ construct():[2002]…htdocsに(unix:///var/mysql/mysql.sockで接続しようとしている)そのようなファイルまたはディレクトリはありません/Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php

そのため、解決策は、sockファイルへのシンボリックリンクを作成して問題を解決することです。それを解決するには、次の手順を実行します。

$ Sudo mkdir/private/var/mysql /

$ Sudo ln -s /アプリケーション/ MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock

ソース: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-while-browser-works-fine/

1

もう1つの解決策は、php.ini設定ファイル内のソケットの場所を次のように修正することです。

pdo_mysql.default_socket=/tmp/mysql.sock

もちろん、シンボリックリンクも機能するので、どちらを変更するかは好みの問題です。

1

Portを使用してphp53-mysqlをインストールすると、この問題の解決策である次のメッセージを返します。

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock
1
Sheric

私は同じエラーを得ました。私はphpMyAdminを開始する前にMysqlはスタンドアロンアプリケーションとして実行されていました。

私はただmysqlを停止し、そしてSudo/Applications/XAMPP/xamppfiles/xampp stop Sudo/Applications/XAMPP/xamppfiles/xampp start

うまくいった

0
minhas23

MAMPを使っているかもしれないので、Portをデフォルトの3306に変更するか、database.phpで127.0.0.1を使ってください。

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

またはデフォルト設定の場合:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
0
Cyber

私はちょうどこの問題を抱えていました、しかし、それは特定のページをロードするときにだけ現れました(他のページはうまく働きました)。 mysql_close()との接続を閉じた後、MySQLを呼び出していたことがわかりました。だから、@ brucenanが言ったように:あなたがそれを呼び出すときにMySQLが実行されていることを確認してください

0
RoberRM

あなたは単にAppleターミナルでMAMP phpをエイリアスすることによってそれをすることができます:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

例:> phpmamp - v

これで、> phpmamp scriptname.phpのように実行できます。

注:これは現在の端末セッションにのみ適用されます。

0
Naresh Chennuri

MySQLクライアントはデフォルトで、localhostのループバックアドレス(127.0.0.1)に接続する代わりに、ソケットと呼ばれるローカルファイルを介して接続を試みます。

このソケットファイルのデフォルトの場所は、少なくともOSXでは/tmp/mysql.sockです。

すばやく簡単な解決策

正しいソケットを見つけるためにOSをだますためのシンボリックリンクを作成します。

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp

適切なソリューション

startMysql.sh/Applications/MAMP/binファイルに定義されているソケットパスを変更します。

0
ashark