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で、間違ったパスの出現箇所をすべてそれで置き換えました。
Linuxを使用している場合:mysql.sockファイルへのパスが間違っています。これは通常、(LAMPP)XAMPPを使用しており、/ tmp/mysql.sockにないためです。
Php.iniファイルを開き、次の行を見つけます。
mysql.default_socket
そしてそれを作ります
mysql.default_socket = /path/to/mysql.sock
同様の問題があり、mySQLをlocalhost
の代わりに127.0.0.1
でアドレス指定することで解決できました。
これはおそらく、ホストのセットアップに何か問題があることを意味しますが、この簡単な修正により、今すぐに進むことができます。
これはMac OS XとApache HTTPのネイティブインストールおよびMySQLのカスタムインストール用です。
答えは@ alec-gorgeの優れた応答に基づいていますが、特定の変更をグーグルで構成して、ほとんどの場合Mac OS X固有の構成にする必要があるため、完全を期すためにここに追加すると思いました。
/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%';
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が正常に動作することを意味します。おめでとうございます!
設定ファイル(db接続)で「localhost」を「127.0.0.1」に置き換えると役に立ちました!
まず、MySQLが実行されていることを確認します。コマンド:mysqld start
それでも接続できない場合:/etc/my.cnfはどのように見えますか?
他の2つの投稿は、2002がソケットエラーであるため、ソケットを確認する必要があるという点で正しいです。
LAMPのセットアップに関する優れたチュートリアルは次のとおりです。 http://library.linode.com/lamp-guides/centos-5.3/index-print
ここで 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コマンドを再試行します。
私の場合、mysqli_connectに問題があります。
接続したいときmysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error()はこのエラー「このようなファイルまたはディレクトリはありません」を返します
これは私のために働いたmysqli_connect('localhost:3306', 'myuser','mypassword')
私もこの問題に遭遇し、「localhost」を「127.0.0.1」に変更しましたが、動作します。
Php.iniファイルをチェックして、mysql.default_socketが正しく設定されていることと、mysqldがアクセス可能なソケットファイルで正しく構成されていることを確認します。通常のデフォルトは「/tmp/mysql.sock」です。
Mysqlサーバーの再起動が役立つ場合があります。私の場合、サーバーを再起動すると多くの時間を節約できました。
service mysql restart
追伸-非rootユーザーにはSudo service mysql restart
を使用してください。
エラー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=1
のxdebug.ini
でXDebugを使用しますSudo dtruss -fn mysqld
を、Linuxではstrace
を使用してデバッグしますstat $(mysql_config --socket)
および十分な空き容量がある場合(df -h
)。net.core.somaxconn
を確認してください。ローカルサーバー(MAMP、XAMPP、WAMPなど)が実行されていることを確認します。
サーバーでPHP-FPMまたは複数のphpバージョンを使用しています。私の場合、mysqlのデフォルトソケットパラメータがないため、mysqli値を更新します:
mysqli.default_socket
に:
mysql.default_socket = /path/to/mysql.sock
@Alec Gorgeに感謝
同様の問題がありました。
基本的にここで問題は、おそらく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を使用してランプサービスを再起動します
あなたは行ってもいいはずです:)
インストーラーを使用して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 で提案されている手順に従ってルートパスワードを変更しました)。
同じ問題がありました。私のソケットは最終的に/tmp/mysql.sockで見つかりました。次に、そのパスをphp.iniに追加しました。 MySQL Workbenchの「サーバーステータス」ページを確認すると、ソケットが見つかりました。ソケットが/tmp/mysql.sockにない場合、MySQL Workbenchはそれがどこにあるかを教えてくれますか? (MySQL Workbenchの使用を許可しました...)
Macでは、すべてのハードワークを行う前に、System Preferences > MySQL
の設定を確認するだけです。ほとんどの場合、The MySQL Server Instance is stopped
以来、この問題に直面しているチームを経験しました。
Start MySQL Server
ボタンをクリックすると、魔法が起こります。