警告: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在错误的位置。
-
检查你的sockets在哪里:
sudo /usr/libexec/locate.updatedb
-
updatedb被终止时:
locate mysql.sock
-
然后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
-
编辑你的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是套接字的path。
-
保存您的修改并退出ESC + SHIFT:x
-
重新启动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 );