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


105

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

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

そして私はいつもこれを手に入れます:

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

それが話しているファイルまたはディレクトリは何ですか?

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

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


2
/etc/init.d/mysql startdebianベースディストリビューションの場合は、の出力を貼り付けてください。失敗した場合は、/etc/my.cnfファイルで正しいmysqlソケットファイルのパスを確認してください。
sepehr 2009年

4
「localhost」の代わりに「127.0.0.1」を使用するXAMPPを使用するOS Xで同じ問題を解決しました。
ジュゼッペウルソ2017年

回答:


96

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

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

mysql.default_socket

そしてそれを作る

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

5
不明な場合は、ソケットへの新しいパスとして/var/lib/mysql/mysql.sockを試してください。
ジェイ

1
うーん。多分それらはヒョウかトラを意味した。いずれにせよ、WordPressを楽しんでください!
アレック渓谷

3
mysqliで接続する場合、mysqli.default_socket = /path/to/mysql.sockの設定が必要になる場合があることに注意してください
狂った

2
標準のMySQLインストールのデフォルトのソケットの場所は/tmp/mysql.sockです。
Jonathon Hill

4
「ホスト名localhostには特別な意味があります。これはUnixドメインソケットの使用にバインドされています。ホスト名localhostを使用してTCP / IP接続を開くことはできません。代わりに127.0.0.1を使用する必要があります。」- php.net/manual/en/mysqli.quickstart.connections.php。つまり、基本的に何かが機能するUnixドメインソケットへの接続で機能せずlocalhost、TCP / IPが機能しているため、TCP / IPアドレスに変更127.0.0.1すると機能します。
エドワード

154

同様の問題があり、の127.0.0.1代わりにmysqlを使用することで解決できましたlocalhost

これはおそらく、ホストのセットアップで何か問題が発生したことを意味しますが、この迅速な修正により、今すぐ対応できます。


2
貴重な時間を節約してくれました。
uchamp 2013

2
hostsファイルを確認したところ、code127.0.0.1 localhostの行が見つかりましたcode。これは、なぜlocalhost経由の接続が機能しないのか知りたくなります。誰かが私を啓蒙することができれば私は幸せです。
ola 2013年

2
これは、php.iniのmysql.default_socketが間違っているためです。「php -i | grep mysql.default_socket」を実行します
Jonah

1
これは私にとってはうまくいきました、私は自家製の経由でmysql 5.7をインストールしたエルキャピタンにいます。WPのインストールを試みていましたが、 "localhost"を "127.0.0.1"に変更すると接続できました。
dgig 2016年

5
「ホスト名localhostには特別な意味があります。これはUnixドメインソケットの使用にバインドされています。ホスト名localhostを使用してTCP / IP接続を開くことはできません。代わりに127.0.0.1を使用する必要があります。」- php.net/manual/en/mysqli.quickstart.connections.php。つまり、基本的に何かが機能するUnixドメインソケットへの接続で機能せずlocalhost、TCP / IPが機能しているため、TCP / IPアドレスに変更127.0.0.1すると機能します。
エドワード

39

これがためにあるのMac OS XネイティブのApache HTTPのインストールMySQLののカスタムインストール

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

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

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

php5_moduleモジュールをロードするために、ファイルを編集しsudo vi /etc/apache2/httpd.conf(要求されたらパスワードを入力)、コメントを外します(;最初から削除します)。

LoadModule php5_module libexec/apache2/libphp5.so

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

/var/log/apache2/error_logphp5_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

mysql.default_socketを開い/etc/php.iniて探します。

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は正常に動作するはずです。おめでとうございます!


この回答が役立ちます
Vigneshwaran

この答えはくだらないです。それは質問されている質問とは関係がなく、基本的にam(acos)ampチュートリアルのみです。これは-良い場合-実際にアンプスタックのセットアップを検索する人がいる場所ではなく、ここに置くとさらに無駄になりますmacosが見ています。質問されている質問について:この回答は、エラーが発生する理由とphpがホスト名ではなくソケット経由で接続しようとする理由を説明していませんmysql_connectが、に渡されますが、これは元の質問の実際の問題であり、一般的なものではありませんソフトウェアのインストールに関する誤解。
ohcibi 2018

@ohcibi 「私は完全を期すためにここに追加したいと思った」と書いたそして、それで十分だと思いました(そして、賛成投票を与えられて、数人がそれを好きでした)。私は答えを見つけやすくするというあなたの考えが好きですが、どうでしょう。あなたの考えを共有して、私を助けてください... ありがとう!
Jacek Laskowski、2018

@JacekLaskowski全般:ブログ投稿を作成し、ここにあるのと同じ意図(「完全を期すために追加する」)と同じ意図で、受け入れられた/最も賛成された応答へのリンクにコメントします。しかし、まさにこのスレッドでは、そのリンクを投稿する理由すらわかりません。OPはmacOSを使用していると述べましたが、この問題はオペレーティングシステムとはまったく関係がなく、mySQLの解釈方法に関係していlocalhostます。macOSでのxampの設定に関するヘルプを探している人は誰もグーグルでアクセスできません。したがって、「がらくた」という用語を使用しました。このスレッドはmacosとは何の関係もありませんが、mysqlのみ(phpではありません)を使用します。
ohcibi 2018

14

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


1
しかし、なぜそれが助けられるべきなのでしょうか?
Enamul Hassan 2015

「 'localhost'を '127.0.0.1'に置き換える」または127.0.0.1を実際のMySQLサーバーアドレス、つまりu55151.mysql.someserver.euに置き換えます。
user2812532

13

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

service mysql restart

PS- sudo service mysql restart非rootユーザーの使用。


2
シンプルなソリューションが実際に機能するのは素晴らしいことです。
abalter

10

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

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

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

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


インストーラーはmy.cnfファイルを配置しませんでしたが、my.cnf /usr/local/mysql/mysql-test/include/default_my.cnfとしてコピーし/etcますか?
mk12 2009年

はい。ただし、後で変更する必要がある場合があります。
トッドモーゼス

7

MySQL の最近のバージョン(さらにはそれより新しいバージョン)では、エラーコード2002は「ソケット[ソケット名]を介してローカルMySQLサーバーに接続できません」を意味するため、もうちょっと。


1
ソースからMySQL 5.5.38がインストールされたOSX 10.9.xで、このエラーが発生しました。このヒントは正しかった:mysqli_connect_errno()とmysqli_connect_error())が2002 file not foundメッセージを言っていたとしても、これはソケットの問題でした。/etc/php.iniを編集し、mysql.default_socketおよびmysqli.default_socketを正しいソケット値に設定することでこれを解決できました(アプリケーションが接続にmysqliを使用していたため)
Ronnie

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

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


わかりました、とあります/var/mysql/mysql.sockが、そのパスは存在しません。
mk12 2009年


6

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

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


これは私にとってはうまくいきました。これは、Armchair Analysisのアメリカンフットボール統計パッケージをOS XローカルMysqlインストールにロードするために必要な変更でした。ありがとう!
Michael Scott Cuthbert

それを聞いてうれしい:)
masoud2011

4

エラー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

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

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を使用xdebug.show_exception_trace=1するxdebug.ini
  • OS Xで試してsudo dtruss -fn mysqld、Linuxでデバッグstrace
  • Unixソケットの権限を確認しstat $(mysql_config --socket)ます。十分な空き容量があるかどうかを確認します(df -h)。
  • MySQLを再起動します。
  • 確認してくださいnet.core.somaxconn

3

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


これに加えて、MacOSでMAMPを使用している場合(明らかに!)、Macのスリープ状態を解除した直後にサイトにアクセスすると、このエラーが発生します。もちろん、解決策は単に待ってから再試行することです。:-)
2018

0

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

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


0

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

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


0

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

mysqli.default_socket

へ:

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

@Alec Gorgeに感謝


0

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


0

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

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


0

Digital Ocean MySql 2002-no-such-file-or-directory

このファイルの終わりを追加 /etc/mysql/my.cnf

[mysqld]
innodb_force_recovery = 1

MySqlを再起動します

service mysql restart


-1

Linuxサーバーでも同じ問題が発生しました。Linuxサーバーの再起動に使用される「sudo reboot」コマンドが役に立ちました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.