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

Nr *_* 28 240 php mysql database

我正在尝试使用Apple上的终端(使用PHP)连接到我的MySQL数据库.

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

当我使用浏览器运行它时(我安装了XAMPP),脚本可以工作,但终端拒绝连接到数据库.

这是我包含连接的文件(当我不包含此脚本时脚本工作,但它不连接到DB):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*owe 413

出于某种原因,OS X上的mysql获取所需套接字文件的位置有点不对,但幸运的是,解决方案就像设置符号链接一样简单.

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

ls -l /tmp/mysql.sock /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

而不是移动套接字,编辑配置文件,并且必须记住将编辑后的文件保持在本地并远离路径正确的服务器,只需创建符号链接,以便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
Run Code Online (Sandbox Code Playgroud)

如果你有,/var/mysql/mysql.sock但没有/tmp/mysql.sock...

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
Run Code Online (Sandbox Code Playgroud)

您将需要创建目录和链接的权限,因此如果需要,只需在上面添加sudo命令.

  • 这相当hacky.我非常推荐@luismreis的答案来解决MySQL隐藏的快捷方式. (15认同)
  • 这不是"hacky".这是让`localhost`套接字工作的正确方法,如果您不希望在访问数据库之前将额外的开销发送到路由器,这可能很重要. (4认同)
  • 没有为我工作...我没有这些文件。但是luismreis的答案奏效了! (2认同)

lui*_*eis 360

我也有这个错误,但只能通过这里的建议修复它.

总结一下,使用:

127.0.0.1
Run Code Online (Sandbox Code Playgroud)

代替:

localhost
Run Code Online (Sandbox Code Playgroud)

原因是"localhost"是MySQL驱动程序的特殊名称,它使用UNIX套接字连接到MySQL而不是TCP套接字.

  • 也许值得一提的是:当像我一样使用MAMP时,你必须取消选中"仅允许本地访问"框 (3认同)
  • @Fabrizio不,它没有关系.当你使用localhost作为名称时,mysql将使用Unix套接字,而不是通过文件条目(例如mysql.sock)处理,而不是Inet,无论是否在/ etc/hosts中声明localhost.但是,当你使用ip地址,甚至是127.0.0.1时,你强制mysql打开一个Inet套接字. (3认同)

小智 24

我遇到了同样的问题,这就是我修复它的方法:

我有这个,它没有用:

$con = mysql_connect('localhost', 'root', '1234');
Run Code Online (Sandbox Code Playgroud)

我这样做了,它有效:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
Run Code Online (Sandbox Code Playgroud)

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


nou*_*oun 21

MySQL套接字通常位于/tmp/mysql.sock或中/var/mysql/mysql.sock,但可能PHP看起来错误的地方.

  1. 检查插座的位置:

     sudo /usr/libexec/locate.updatedb
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当updatedb终止时:

     locate mysql.sock
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后找到你的php.ini:

     php -i | grep php.ini
    
    Run Code Online (Sandbox Code Playgroud)

    这将输出如下内容:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
    
    Run Code Online (Sandbox Code Playgroud)
  4. 编辑你的php.ini

     sudo vim /opt/local/etc/php54/php.ini
    
    Run Code Online (Sandbox Code Playgroud)
  5. 改变线条:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock
    
    Run Code Online (Sandbox Code Playgroud)

    其中/tmp/mysql.sock是套接字的路径.

  6. 保存修改并退出ESC + SHIFT:x

  7. 重启Apache

     sudo apachectl stop
     sudo apachectl start
    
    Run Code Online (Sandbox Code Playgroud)


小智 11

我在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
Run Code Online (Sandbox Code Playgroud)


Jso*_*ras 10

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
Run Code Online (Sandbox Code Playgroud)

然后这样做

cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
Run Code Online (Sandbox Code Playgroud)

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


cri*_*ian 6

当您遇到以下问题时:

PHP抛出错误"警告:mysql_connect()http://function.mysql-connect:2002没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock连接)"

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

 "mysql.default_socket = /var/mysql/mysql.sock". 
Run Code Online (Sandbox Code Playgroud)

然后在服务器管理员中重启Web服务


bru*_*nan 6

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