mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在

我试图连接到我的MySQL数据库与终端在我的苹果(与PHP)。

昨天它工作正常,现在我突然得到错误的标题。

当我使用浏览器运行该脚本时(我已经安装了XAMPP),但终端拒绝连接到DB。

下面是我要连接的文件(当我不包括这个时,脚本工作,但它不连接到DB):

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

这应该可以工作,因为它适用于我的浏览器。

我在终端上使用的命令是php scriptname.php

259458 次浏览

当你面临以下问题时:

PHP抛出错误"Warning: mysql_connect() http://function.mysql-connect: 2002 No such file or directory(尝试通过unix:///tmp/mysql.sock连接)"

在你的/etc/php.ini中设置"mysql.default_socket"的值为

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

然后在服务器管理中重新启动web服务

由于某些原因,OS X上的mysql获取所需套接字文件的位置有点错误,但幸运的是,解决方案非常简单,只需设置一个符号链接。

你可能有一个套接字(显示为零长度文件)为/tmp/mysql.sock/var/mysql/mysql.sock,但一个或多个应用程序正在其他位置寻找它。用这个命令找出答案:

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

而不是移动套接字,编辑配置文件,并必须记住将编辑的文件保存在本地,远离路径正确的服务器,只需创建一个符号链接,以便您的Mac找到所需的套接字,即使它在错误的地方查找!

如果你有/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驱动程序的一个特殊名称,它使用UNIX套接字来连接MySQL,而不是TCP套接字。

我也遇到过同样的问题,我是这样解决的:

我有这个,但不管用:

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

我这样做了,效果很好:

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

我没有使用mysql服务器,而是直接连接到Unix Socket。为我工作。

我在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

另一个解决方案是修复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

MySQL套接字通常位于/tmp/mysql.sock/var/mysql/mysql.sock中,但PHP可能找错了地方。

  1. 检查你的socket在哪里:

     sudo /usr/libexec/locate.updatedb
    
  2. When the updatedb is terminated:

     locate mysql.sock
    
  3. Then locate your 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. Edit your php.ini

     sudo vim /opt/local/etc/php54/php.ini
    
  5. Change the lines:

     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. < p >重新启动Apache

     sudo apachectl stop
    sudo apachectl start
    

原因是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。

我得到相同的错误。 Mysql在我启动phpMyAdmin之前是作为一个独立的应用程序运行的

我刚刚停止mysql 然后 sudo /Applications/XAMPP/xamppfiles/ XAMPP stop sudo /Applications/XAMPP/xamppfiles/ XAMPP start

. sudo /Applications/XAMPP/xamppfiles/ XAMPP start

它运行得很好

我只是有这个问题,但它只出现在加载某些页面(其他页面工作正常)。事实证明,在我用mysql_close()关闭连接后,我正在调用MySQL。所以,正如@brucenan所说:确保MySQL在调用时正在运行

修复了即将出现的2002套接字错误——这是连接MySQL放置套接字的地方和OSX认为它应该在的地方,MySQL把它放在/tmp中,OSX在/var/ MySQL中寻找它,套接字是一种允许MySQL客户端/服务器通信的文件类型。

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/

Mac OS X EL Capitan + MAMP Pro 这样做< / p >
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

希望这能为您节省一些时间。

我也有同样的问题

< p > <强> [PDOException] SQLSTATE[HY000] [2002] No such file or directory

. txt文件或目录 < p > <强> [ErrorException] 警告:PDO::__construct():[2002]没有这样的文件或目录(试图通过unix:///var/mysql/mysql.sock连接)在…htdocs/Symfony/vendor/ Doctrine - DBAL/ lib/Doctrine/DBAL/Driver/PDOConnection.php

.sock)

因此,解决方案是创建一个指向sock文件的符号链接,从而解决问题。请执行以下操作来解决该问题:

$ sudo mkdir /private/var/mysql/

$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql袜子/私人/ var / mysql / mysql.sock

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

你可以通过在苹果终端上别名MAMP php来实现:

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

例如:> phpmamp - v

现在你可以运行类似> phpmamp scriptname.php的代码

注意:这将只应用于当前终端会话。

因为您可能使用MAMP,所以您可以将端口更改为默认的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客户端默认尝试通过一个称为套接字的本地文件进行连接,而不是连接到本地主机的环回地址(127.0.0.1)。

至少在OSX上,这个套接字文件的默认位置是/tmp/mysql.sock

快速,不那么优雅的解决方案

创建一个符号链接来欺骗操作系统找到正确的套接字。

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

妥善解决

更改/Applications/MAMP/binstartMysql.sh文件中定义的套接字路径。