Php 警告:mysql_connect():[2002]没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock)在
我正在尝试用苹果上的终端(用PHP)连接MySQL数据库 昨天它运行得很好,现在我突然发现了标题中的错误 当我使用浏览器运行脚本(我安装了XAMPP)时,脚本可以工作,但终端拒绝连接到DB 下面是我要连接的文件(当我不包括此文件时,脚本会工作,但它不会连接到数据库):Php 警告:mysql_connect():[2002]没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock)在,php,mysql,database,Php,Mysql,Database,我正在尝试用苹果上的终端(用PHP)连接MySQL数据库 昨天它运行得很好,现在我突然发现了标题中的错误 当我使用浏览器运行脚本(我安装了XAMPP)时,脚本可以工作,但终端拒绝连接到DB 下面是我要连接的文件(当我不包括此文件时,脚本会工作,但它不会连接到数据库): 这应该行得通,因为它适用于我的浏览器 当您面临以下问题时,我在终端使用的命令是php scriptname.php: PHP抛出错误“警告:mysql_connect():2002没有这样的文件或目录(试图通过unix:///
这应该行得通,因为它适用于我的浏览器
当您面临以下问题时,我在终端使用的命令是
php scriptname.php
:
PHP抛出错误“警告:mysql_connect():2002没有这样的文件或目录(试图通过unix:///tmp/mysql.sock)"
将/etc/php.ini
中的“mysql.default\u socket”值设置为
"mysql.default_socket = /var/mysql/mysql.sock".
然后在server admin中重新启动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
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
如果您有/var/mysql/mysql.sock
但没有/tmp/mysql.sock
,那么
cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
创建目录和链接需要权限,因此如果需要,只需在上面的命令前面加上sudo即可。我也有此错误,但只能通过建议进行修复 要总结,请使用:
127.0.0.1
而不是:
localhost
原因是“localhost”是MySQL驱动程序的一个特殊名称,它使用UNIX套接字而不是TCP套接字来连接MySQL。我也遇到了同样的问题,我就是这样解决的: 我有这个,但它不起作用:
$con = mysql_connect('localhost', 'root', '1234');
我这样做了,它成功了:
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
我没有使用mysql服务器,而是直接连接到Unix套接字。为我工作。我使用Mac OS X上的XAMPP,上面Brian Lowe的解决方案只做了一点修改 mysql.sock文件实际上位于“/Applications/xampp/xamppfiles/var/mysql/”文件夹中。所以必须在/tmp和/var/mysql中链接它。我还没有检查PHP命令行使用的是哪一个,但这已经解决了问题,所以我很高兴:-)
另一个解决方案是修复php.ini配置文件中的套接字位置,如下所示:
pdo_mysql.default_socket=/tmp/mysql.sock
当然,符号链接也可以工作,因此更改哪一个取决于您的偏好。当您使用端口安装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可能位于错误的位置
sudo /usr/libexec/locate.updatedb
locate mysql.sock
php -i | grep php.ini
这将输出如下内容:
Configuration File (php.ini) Path => /opt/local/etc/php54
Loaded Configuration File => /opt/local/etc/php54/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是套接字的路径 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
它工作得很好我刚刚遇到这个问题,但它只在加载某些页面时出现(其他页面工作得很好)。原来我是在用
MySQL\u close()
关闭连接后调用MySQL的。因此,正如@brucenan所说:确保调用MySQL时MySQL正在运行修复即将出现的2002套接字错误–即链接MySQL放置套接字的位置和OSX认为应该在的位置,MySQL将它放在/tmp中,OSX在/var/MySQL中查找。套接字是一种允许MySQL客户机/服务器通信的文件类型
sudo mkdir /var/mysql
然后
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
来源:Mac OS X EL Capitan+MAMP Pro 这样做 那就这样做吧
cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
希望这能为您节省一些时间。我也遇到了同样的问题 [pdo异常] SQLSTATE[HY000][2002]没有这样的文件或目录 [ErrorException] 警告:PDO::_construct():[2002]没有这样的文件或目录(正在尝试通过unix:///var/mysql/mysql.sock)在…htdocs/Symfony/vendor/doctrine dbal/lib/doctrine/dbal/Driver/PDOConnection.php中 因此,解决方案是创建一个指向sock文件的符号链接,从而解决问题。请执行以下操作以解决此问题: $sudo mkdir/private/var/mysql/ $sudo ln-s/Applications/MAMP/tmp/mysql/mysql.sock/private/var/mysql/mysql.sock
来源:您只需在Apple终端上为MAMP php添加别名即可:
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
示例:>phpmamp-v
现在您可以运行类似以下内容:>phpmap scriptname.php
注
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
$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
);
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp