web-dev-qa-db-ja.com

MySQL接続が機能しない:2002そのようなファイルまたはディレクトリはありません

WordPressをセットアップしようとしています。 ApacheとMySQLを実行していますが、アカウントとデータベースはすべて設定されています。私は簡単な接続を試みました:

<?php
    $conn = mysql_connect('localhost', 'USER', 'PASSWORD');
    if(!$conn) {
        echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
    }
?>

そして、私は常にこれを取得します:

エラー:2002-そのようなファイルまたはディレクトリはありません

どんなファイルまたはディレクトリについて話しているのでしょうか?

OS X Snow Leopardで、組み込みのApacheを使用しています。 x86_64 dmgを使用してMySQLをインストールしました。

更新:ソケットが/tmp/mysql.sockにあることがわかったので、php.iniで、間違ったパスの出現箇所をすべてそれで置き換えました。

94
mk12

Linuxを使用している場合:mysql.sockファイルへのパスが間違っています。これは通常、(LAMPP)XAMPPを使用しており、/ tmp/mysql.sockにないためです。

Php.iniファイルを開き、次の行を見つけます。

mysql.default_socket

そしてそれを作ります

mysql.default_socket = /path/to/mysql.sock
89
Alec Gorge

同様の問題があり、mySQLをlocalhostの代わりに127.0.0.1でアドレス指定することで解決できました。

これはおそらく、ホストのセットアップに何か問題があることを意味しますが、この簡単な修正により、今すぐに進むことができます。

135
bryan kennedy

これはMac OS XApache HTTPのネイティブインストールおよびMySQLのカスタムインストール用です。

答えは@ alec-gorgeの優れた応答に基づいていますが、特定の変更をグーグルで構成して、ほとんどの場合Mac OS X固有の構成にする必要があるため、完全を期すためにここに追加すると思いました。

Apache HTTPのPHP5サポートを有効にします

/etc/Apache2/httpd.confでPHP5サポートが有効になっていることを確認してください。

Sudo vi /etc/Apache2/httpd.conf(要求されたらパスワードを入力)でファイルを編集し、行のコメントを外して(;を先頭から削除)php5_moduleモジュールをロードします。

LoadModule php5_module libexec/Apache2/libphp5.so

Sudo apachectl startでApache HTTPを起動します(すでに起動していて、構成ファイルを再読み込みするために再起動する必要がある場合はrestart)。

/var/log/Apache2/error_logにphp5_moduleが有効になっていることを示す行が含まれていることを確認してください-PHP/5.3.15(または同様の)が表示されるはずです。

[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations

ソケットファイルの名前の検索

MySQLが稼働しているとき(./bin/mysqld_safeを使用)、ログファイルの場所を示すデバッグ行がコンソールに出力されるはずです。ファイル名に含まれるホスト名-私の場合はlocalhost-は、構成によって異なる場合があります。

Logging toの後にあるファイルは重要です。そこでMySQLが作業を記録します。

130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data

localhost.errファイルを開きます(これも、名前が異なる場合があります)。つまり、tail -1 /Users/jacek/apps/mysql/data/localhost.errを開いて、ソケットファイルの名前を見つけます-最後の行である必要があります。

$ tail -1 /Users/jacek/apps/mysql/data/localhost.err
Version: '5.5.27'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

socket:部分に注意してください-php.iniで使用する必要があるソケットファイルです。

MySQLにログインして実行することにより、ソケットのファイル名の場所を決定する別の方法(簡単な方法と言う人もいます)があります。

show variables like '%socket%';

MySQLをサポートするPHP5の構成-/etc/php.ini

Php.iniといえば...

/etcディレクトリには/ etc/php.ini.defaultファイルがあります。 / etc/php.iniにコピーします。

Sudo cp /etc/php.ini.default /etc/php.ini

/etc/php.iniを開き、mysql.default_socketを探します。

Sudo vi /etc/php.ini

mysql.default_socketのデフォルトは/var/mysql/mysql.sockです。以前にメモした値に変更する必要があります-私の場合は/tmp/mysql.sockでした。

/etc/php.iniファイルを置き換えて、ソケットファイルの名前を反映します。

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

最終確認

Apache HTTPを再起動します。

Sudo apachectl restart 

PHP5に関連するエラーがない場合は、ログを確認してください。エラーがないということは、作業が完了し、MySQLを使用したPHP5が正常に動作することを意味します。おめでとうございます!

37
Jacek Laskowski

設定ファイル(db接続)で「localhost」を「127.0.0.1」に置き換えると役に立ちました!

14
Oleg

まず、MySQLが実行されていることを確認します。コマンド:mysqld start

それでも接続できない場合:/etc/my.cnfはどのように見えますか?

他の2つの投稿は、2002がソケットエラーであるため、ソケットを確認する必要があるという点で正しいです。

LAMPのセットアップに関する優れたチュートリアルは次のとおりです。 http://library.linode.com/lamp-guides/centos-5.3/index-print

9
Todd Moses

MySQLの 最近のバージョン (さらには 最近ではない )では、エラーコード2002は「ソケットを介してローカルMySQLサーバーに接続できません」という意味です。 [ソケット名]」を使用すると、もう少しわかります。

7

ここで Matthias Dの回答を展開します MySQLとMariaDBの両方で、これらのコマンドを使用して正確なパスでこの2002エラーを解決できました。

最初に実際のパスをMySQLソケットに取得します。

netstat -ln | grep -o -m 1 '/.*mysql.sock'

次に、PHPパスを取得します。

php -r 'echo ini_get("mysql.default_socket") . "\n";'

これら2つのコマンドの出力を使用して、それらをリンクします。

Sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock

それがNo such file or directoryを返す場合、PHP mysql.sockへのパスを作成する必要があります。たとえば、パスが/var/mysql/mysql.sockである場合、実行します:

Sudo mkdir -p /var/mysql

次に、Sudo lnコマンドを再試行します。

6
mattbell87

私の場合、mysqli_connectに問題があります。
接続したいとき
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error()はこのエラー「このようなファイルまたはディレクトリはありません」を返します

これは私のために働いたmysqli_connect('localhost:3306', 'myuser','mypassword')

6
masoud2011

私もこの問題に遭遇し、「localhost」を「127.0.0.1」に変更しましたが、動作します。

6
JackSun

Php.iniファイルをチェックして、mysql.default_socketが正しく設定されていることと、mysqldがアクセス可能なソケットファイルで正しく構成されていることを確認します。通常のデフォルトは「/tmp/mysql.sock」です。

6
Myles

Mysqlサーバーの再起動が役立つ場合があります。私の場合、サーバーを再起動すると多くの時間を節約できました。

service mysql restart

追伸-非rootユーザーにはSudo service mysql restartを使用してください。

6
Avani Khabiya

エラー2002は、MySQLがソケットファイル(/tmp/mysql.sockなど)を介してローカルデータベースサーバーに接続できないことを意味します。

ソケットファイルの場所を確認するには、次を実行します。

mysql_config --socket

次に、アプリケーションが正しいUnixソケットファイルを使用していることを確認するか、代わりにTCP/IPポートを介して接続します。

次に、PHPに適切なMySQLソケットが設定されているかどうかを再確認します。

php -i | grep mysql.default_socket

ファイルが存在することを確認してください

ソケットをテストします。

mysql --socket=/var/mysql/mysql.sock

Unixソケットが間違っているか存在しない場合は、次のようにシンボリックリンクできます。

ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

または設定ファイルを修正します(例:php.ini)。

PDO 接続をPHPから直接テストするには、次を実行します。

php -r "new PDO('mysql:Host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

構成が異なる場合があるため、ApacheとCLI(コマンド行インターフェース)間の構成も確認してください。

サーバーが稼働している可能性がありますが、サーバーがリッスンしているものとは異なるTCP/IPポート、名前付きパイプ、またはUnixソケットファイルを使用して接続しようとしています。これを修正するには、クライアントプログラムを呼び出して(たとえば--portオプションを指定)、適切なポート番号、または適切な名前付きパイプまたはUnixソケットファイル(たとえば--socketオプション)を示す必要があります。

参照: MySQLへの接続に関する問題のトラブルシューティング


問題の追跡に役立つその他のユーティリティ/コマンド:

  • mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • xdebug.show_exception_trace=1xdebug.iniでXDebugを使用します
  • OS XではSudo dtruss -fn mysqldを、Linuxではstraceを使用してデバッグします
  • Unixソケットの許可を確認します:stat $(mysql_config --socket)および十分な空き容量がある場合(df -h)。
  • MySQLを再起動します。
  • net.core.somaxconn を確認してください。
3
kenorb

ローカルサーバー(MAMP、XAMPP、WAMPなど)が実行されていることを確認します。

2
Husain Al Faraj

サーバーでPHP-FPMまたは複数のphpバージョンを使用しています。私の場合、mysqlのデフォルトソケットパラメータがないため、mysqli値を更新します:

mysqli.default_socket

に:

mysql.default_socket = /path/to/mysql.sock

@Alec Gorgeに感謝

0
navotera

同様の問題がありました。
基本的にここで問題は、おそらくmysqlの2つのインスタンスが実行されていることです。
A)/etc/init.dで実行されているもの
B)/ opt/lampに設置されているランプ
解決 :
ステップ1:-commnad "find/| grep mysqld"を使用して、実行中のすべてのmysqlインスタンスを検索します
ステップ2:-service mysql stopを使用して/etc/init.dで実行されているサービスをシャットダウンします
ステップ3:-/ opt/lamp/lamp restartを使用してランプサービスを再起動します

あなたは行ってもいいはずです:)

0
Jignesh Rawal

インストーラーを使用してMySQLをインストールしました。実際、「bin」ディレクトリと並んでデータディレクトリはありませんでした。

したがって、I 手動で作成「C:\ Program Files\MySQL\MySQL Server 8.0」の下の「data」ディレクトリ。そして、それは機能しました( https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html で提案されている手順に従ってルートパスワードを変更しました)。

0
Park JongBum

同じ問題がありました。私のソケットは最終的に/tmp/mysql.sockで見つかりました。次に、そのパスをphp.iniに追加しました。 MySQL Workbenchの「サーバーステータス」ページを確認すると、ソケットが見つかりました。ソケットが/tmp/mysql.sockにない場合、MySQL Workbenchはそれがどこにあるかを教えてくれますか? (MySQL Workbenchの使用を許可しました...)

0
Fom

Macでは、すべてのハードワークを行う前に、System Preferences > MySQLの設定を確認するだけです。ほとんどの場合、The MySQL Server Instance is stopped以来、この問題に直面しているチームを経験しました。

Start MySQL Serverボタンをクリックすると、魔法が起こります。

0