无法通过Bitnami lamp堆栈通过PHP连接到MySQL

3

好的,这将是一个很长的问题。

我正在尝试在我的大学帐户上运行某个项目。我们有一个public_html文件夹,可以用作Web空间来托管我们想放置的任何内容。

我已经在public_html文件夹中安装了Bitnami LAMP堆栈(从安全角度来看可能不是最佳选择,但我只打算测试该应用程序几天并将其删除,所以我真的不在意,只要我能快速地运行),我想托管的网站可以通过(http://(大学地址)/(我的帐户名)/public_html/lamp/apache2/htdocs/(等等..)进行访问。然而,连接到数据库的代码的某些部分给了我以下警告:

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我正在使用以下代码连接数据库:
mysql_connect($CFG->dbhost,$CFG->dbuser,$CFG->dbpass);

其中dbhost是“localhost”。

由于它引用了“/var/run/mysqld/mysqld.sock”,显然意味着它试图连接到错误的东西,因为我安装的lamp堆栈中的mysql在其my.cnf中具有以下内容:

[mysqladmin]
user=root

[mysqld]
basedir=(my account folder)/public_html/lamp/mysql
datadir=(my account folder)/public_html/lamp/mysql/data
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock
tmpdir=(my account folder)/public_html/lamp/mysql/tmp

[mysqld_safe]
mysqld=mysqld.bin

[client]
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock

[manager]
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock
pid-file=(my account folder)/public_html/lamp/mysql/tmp/manager.pid
default-mysqld-path=(my account folder)/public_html/lamp/mysql/bin/mysqld.bin

所以我的问题是,有人知道如何将它连接到正确的套接字吗?另外,var/run/mysqld/mysqld.sock根本不存在,我显然没有权限创建它(我也不知道它如何为我的目的服务)。这个问题困扰了我一整天。任何帮助都将不胜感激。祝好!
1个回答

1

您可能需要使用 mysql_connect 中定义的套接字(您应该能够在示例#3中看到功能示例)来指定my.cnf中定义的套接字,而不是localhost,通过使$CFG->dbhost指向套接字文件

$CFG->dbhost = ':(my account folder)/public_html/lamp/mysql/tmp/mysql.sock';
$link = mysql_connect($CFG->dbhost,$CFG->dbuser,$CFG->dbpass);

看看是否有效!

另一个建议是确保您的mysql服务实际上在该位置“(我的帐户文件夹)/public_html/lamp/mysql/tmp/mysql.sock”创建了套接字文件。


编辑:

我们只需要确认您的mysql sock文件路径是有效的,并且该文件已经被创建,看起来是这样的。

您能否确认您可以从命令行手动连接到mysql服务器,这将是另一个有助于诊断的好步骤。

mysql --socket=<my account folder>/public_html/lamp/mysql/tmp/mysql.sock -u <username> -p

编辑2:

只是快速确认一下,当您在上述示例中替换您的帐户文件夹时,您是否使用了完整路径。

例如:

/home/<username>/public_html/lamp/mysql/tmp/mysql.sock

如何检查文件是否由我的mysql服务创建?我假设它是这样的,因为它是在安装bitnami lamp堆栈后创建的。此外,我尝试了示例#3。它给了我相同的警告,并且我已经仔细检查了mysql.sock的位置,它肯定在那里,而且我已经允许了对它的完全访问。再次感谢。 - MikiRei
是的。我已经尝试过使用 "/home/<username>" 和完整的文件路径,以防止在使用 "/home/<username>" 时无法正确重定向。 - MikiRei
你成功通过命令行连接到了mysql服务器吗? - houmam
嗯,如果您可以通过套接字连接到mysql服务器,那么当您指定适当的套接字时,您“应该”能够通过PHP连接。您能否确认您是否使用了所需的精确符号,如':/tmp/mysql',或者您可以尝试使用 'localhost:/tmp/mysql' 符号,您必须确保您的字符串中没有丢失':'。如果仍然无法正常工作,您可以提供错误消息和新套接字文件的 mysql_error() 输出。 - houmam
是的,我尝试了几种组合,都用了“:”,但仍然出现相同的警告。也许是我的大学防火墙阻止了它正常连接?可能吧。我已经在另一台服务器上使其正常工作了,所以不再重要了。非常感谢您的帮助!万分感激! - MikiRei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接