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

我试图连接到我的苹果(与PHP)上的terminal我的MySQL数据库。

昨天它运行良好,现在我突然得到这个错误(见标题)。 我不知道如何解决这个问题。 我花了所有的空闲时间今天尝试=(

当我使用我的浏览器来运行它时(我已经安装了XAMPP),但是terminal拒绝连接到数据库。

她的eis文件,我包括连接(脚本工程,当我不包括这个,但它不连接到数据库):

<?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,但是有一个或多个应用程序在其他位置寻找它。

不要移动套接字,而是必须编辑configuration文件,并记住将编辑的文件保持在本地,远离path正确的服务器,只需创build一个符号链接,以便即使在错误的位置查找所需的套接字,也可以find所需的套接字!

如果你有/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 

你将需要权限来创build目录和链接,所以只要在sudo前面添加上面的命令就行了。

希望这可以帮助。 到目前为止,它已经在3个mac上为我sorting了这个确切的问题。

我也有这个错误,但只能通过这里的build议来解决它。

总结一下,使用:

 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套接字。 为我工作。

一般来说,MySQL套接字位于/tmp/mysql.sock/var/mysql/mysql.sock ,但可能PHP在错误的位置。

  1. 检查你的sockets在哪里:

      sudo /usr/libexec/locate.updatedb 
  2. updatedb被终止时:

      locate mysql.sock 
  3. 然后find你的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. 编辑你的php.ini

      sudo vim /opt/local/etc/php54/php.ini 
  5. 更改行数:

      pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket=/tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock 

    其中/tmp/mysql.sock是套接字的path。

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

  7. 重新启动Apache

      sudo apachectl stop sudo apachectl start 

我在Mac OS X上使用XAMPP, 上面的Brian Lowe的解决scheme稍作修改

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的正确path。

请确保您的mysql正在运行。

然后,请确认位于哪个path的mysql.sock ,例如/tmp/mysql.sock

然后将这个pathstring添加到php.ini中:

  • mysql.default_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

最后,重新启动Apache。

当您遇到以下问题时:

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

/etc/php.ini “mysql.default_socket”值设置为

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

然后在服务器admin中重新启动Web服务

修复了即将到来的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/

另一个解决scheme是像这样修复php.iniconfiguration文件中的套接字位置:

 pdo_mysql.default_socket=/tmp/mysql.sock 

当然,符号链接也是可以的,所以它是一个你喜欢哪一个的改变。

当您使用端口安装php53-mysql时,它将返回以下消息,这是此问题的解决scheme:

 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 

我有同样的问题

[PDOException] SQLSTATE [HY000] [2002]没有这样的文件或目录

[ErrorException]警告:PDO :: __构造():[2002]没有这样的文件或目录(试图通过unix:///var/mysql/mysql.sock连接)… htdocs / Symfony / vendor / doctrine-dbal / LIB /教义/ DBAL /驱动器/ PDOConnection.php

所以解决的办法是做一个符号链接到袜子文件,从而解决这个问题。 执行以下操作来解决它:

$ sudo mkdir / private / var / mysql /

$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock

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

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

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

它工作正常

我只是有这个问题,但只有当加载某些网页(其他网页工作正常)才出现。 事实certificate,我closures与mysql_close()的连接后,我正在调用MySQL。 所以,正如@brucenan所说的那样: 确保MySQL在你调用它时运行

你可以通过在苹果terminal上简单地使用MAMP来实现:

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

例如: > phpmamp - v

现在你可以像这样运行: > phpmamp scriptname.php

注意:这仅适用于当前的terminal会话。

既然你可能使用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 );