mysql_connect():没有这样的文件或目录

时间:2012-09-25 14:09:47

标签: php mysql redhat mysql-connect

我刚刚在旧的RedHat7上安装了MySQL服务器(版本3.23.58)。由于依赖性,我无法安装更新的MySQL版本。我无法更新此RedHat服务器上的库。

但是,我在使用PHP连接数据库时遇到问题。首先我使用PDO,但我意识到PDO与MySQL 3.23不兼容......

所以我使用了mysql_connect()。现在我有以下错误:

Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9
Error: No such file or directory

我的代码是:

$host = 'localhost';
$user = 'root';
$password = '';
$database = 'test';
$db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error());
mysql_select_db($database);

我检查了两次数据库是否存在,登录名和密码是否正确。

这很奇怪,因为代码在带有Wampp的Windows PC上运行良好。我无法弄清楚问题的来源。

有什么想法吗?

5 个答案:

答案 0 :(得分:35)

是的,你不能那样连接!

@PLB和@jammypeach mysqli是在v4.1之后,他正在使用v3 :) 如果你真的需要帮助,伙计们会阅读规范!

您无法连接,因为您的套接字文件有点不对。我现在记得以前老RH有过这个问题。 您的套接字可能是/var/mysql/mysql.sock或/tmp/mysql.sock,但是一个或多个应用程序正在寻找另一个。

如果你的是/tmp/mysql.sock但没有/var/mysql/mysql.sock你应该:

cd /var 
mkdir mysql
cd mysql
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,如果需要在上面的命令之前!

另一种解决方案(更简单):

创建文件并调用phpinfo();寻找'mysql.default_socket';或'pdo_mysql.default_socket'; 打开My.ini或My.cnf找到套接字值,例如插座= / TMP /的mysql.sock 打开你的php.ini文件(也可以在phpinfo()页面上找到'加载配置文件'),并将错误套接字位置的所有出现更改为MySQL中正确的套接字位置。

另一种解决方案(最简单): DSN for PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=...

的mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...

在安全方面,您的系统非常可怕,如果您托管敏感数据,我会升级到最新版本。

----更新----

Aaahhhh PHP 5.0和MySQL 3.23:)

PHP 5有一个打包的mysql客户端无法连接到低于4.1版的MySQL数据库。 从版本4.1开始,MySQL使用一种新的密码散列方式,与4.1之前的数据库不兼容。您的配置连接的服务器是版本3.23。所以你需要让自己获得更高版本的MySQL。抱歉,您的案例没有其他实用的解决方案。如果我是你,我会升级整个系统并安装最新的操作系统版本,如果我不得不使用Debian和最新的稳定版本的PHP和MySQL。

答案 1 :(得分:2)

在MAC OSX上只需重新启动mysql服务器

sudo /usr/local/mysql/support-files/mysql.server restart

它对我有用

答案 2 :(得分:2)

幸运的是,这对我很有用:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');

答案 3 :(得分:1)

我有一个类似的问题花了我几个小时来解决。我将Mysql / Mariadb放在一个单独的驱动器上,PHP驱动的网站在默认位置寻找套接字。所以,我创建了一个符号链接,但我认为SELinux不会给予许可。所以,然后我将这些行添加到/etc/php.ini文件中并且它可以工作。

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

答案 4 :(得分:0)

我使用MAMP并且有样本问题。我发现tmp中没有mysql.sock。所以使用此代码

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

它对我有用