私は私の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
です。
何らかの理由で、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を付けてください。
私もこのエラーを抱えていましたが、提案を通してしか直すことができませんでした ここ 。
要約すると、
127.0.0.1
の代わりに:
localhost
その理由は、 "localhost"はMySQLドライバの特別な名前であり、TCPソケットの代わりにUNIXソケットを使用してMySQLに接続するためです。
私は同じ問題を抱えていました、そして、これは私がそれを直した方法です:
私はこれを持っていました、そしてそれはうまくいきませんでした:
$con = mysql_connect('localhost', 'root', '1234');
私はこれをしました、そしてそれはうまくいきました:
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
Mysqlサーバーを使用する代わりに、私は直接Unix Socketに接続しました。私のために働きました。
MySQLソケットは通常/tmp/mysql.sock
または/var/mysql/mysql.sock
にありますが、おそらくPHPは間違った場所に見えます。
ソケットの位置を確認してください。
Sudo /usr/libexec/locate.updatedb
Updatedbが終了した場合
locate mysql.sock
それから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
Php.iniを編集してください
Sudo vim /opt/local/etc/php54/php.ini
行を変更します。
pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket=/tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
/tmp/mysql.sockはソケットへのパスです。
変更を保存してESC + SHIFTを終了します。x
Apacheを再起動します
Sudo apachectl stop
Sudo apachectl start
私は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
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
これが時間を節約することを願っています。
その理由は、phpがmysql.sock
の正しいパスを見つけられないためです。
Mysqlが最初に実行されていることを確認してください。
次に、どのパスがmysql.sock
であるかを確認してください。たとえば、/tmp/mysql.sock
次に、このパス文字列をphp.iniに追加します。
最後に、Apacheを再起動してください。
次の問題に直面したとき:
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サービスを再起動します
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/
私は同じ問題を抱えていた
[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
もう1つの解決策は、php.ini設定ファイル内のソケットの場所を次のように修正することです。
pdo_mysql.default_socket=/tmp/mysql.sock
もちろん、シンボリックリンクも機能するので、どちらを変更するかは好みの問題です。
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
私は同じエラーを得ました。私はphpMyAdminを開始する前にMysqlはスタンドアロンアプリケーションとして実行されていました。
私はただmysqlを停止し、そしてSudo/Applications/XAMPP/xamppfiles/xampp stop Sudo/Applications/XAMPP/xamppfiles/xampp start
うまくいった
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
);
私はちょうどこの問題を抱えていました、しかし、それは特定のページをロードするときにだけ現れました(他のページはうまく働きました)。 mysql_close()
との接続を閉じた後、MySQLを呼び出していたことがわかりました。だから、@ brucenanが言ったように:あなたがそれを呼び出すときにMySQLが実行されていることを確認してください。
あなたは単にAppleターミナルでMAMP phpをエイリアスすることによってそれをすることができます:
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
例:> phpmamp - v
これで、> phpmamp scriptname.php
のように実行できます。
注:これは現在の端末セッションにのみ適用されます。
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
ファイルに定義されているソケットパスを変更します。