我应该如何引用 Web 主机上的 MySQL 服务器?

Posted

技术标签:

【中文标题】我应该如何引用 Web 主机上的 MySQL 服务器?【英文标题】:How should I refer to a MySQL server on a web host? 【发布时间】:2012-10-12 23:35:31 【问题描述】:

当使用 php 连接到 web 主机上的 mysql 数据库时,引用服务器的最佳方式是什么?

我的 web 主机上的 MySQL 管理页面显示服务器的 IP 地址是什么,但我可以使用 IP 号码以外的其他地址吗?

例如。

$con = mysql_connect("l00.50.10.10","user","password");
if (!$con)  die('Could not connect: ' . mysql_error()); 

当我使用localhost 时,我得到了这个输出:

无法连接:无法通过套接字连接到本地 MySQL 服务器 '/var/lib/mysql/mysql.sock' (2)

【问题讨论】:

如果您的 PHP 代码与数据库位于同一台服务器上,则使用“localhost”更为常见。 也许它失败了,因为你有一个小写的 L 而不是数字 1? ;) @ElYobo PDO 和 mysqli 各有利弊;我不会说任何一个都一定比另一个更好。 @Vulcan,只要 OP 使用其中一种,它们就会处于一个更好的位置:) 我想不出在很多情况下 MySQLi 会是更好的选择,但是我想其中有一些。 我认为初学者应该从mysqli开始。有更多可用的多种语言的 mysqli_ 教程和示例。当 mysqli 还不够时,PDO 更适合更有经验的程序员 【参考方案1】:

您是否尝试过在 google 中输入类似的内容?

php 无法连接:无法通过连接本地 MySQL 服务器 套接字'/var/lib/mysql/mysql.sock' (2)

【讨论】:

【参考方案2】:

如果数据库主机是同一台计算机 - 使用 localhost。当您使用localhost 和端口号时,MySQL 将通过本地套接字连接,而不是 tcpip(网络)。

有时服务器不支持socket连接,你会得到如下错误:

无法连接:无法通过套接字连接到本地 MySQL 服务器...

编辑/更正: 如果您无法通过套接字连接 - 请使用 127.0.0.1。它将通过 tcpip 强制连接。

如果数据库服务器安装在其他机器上 - 您可以使用IP addressdomain

在大多数情况下,IP 地址更好,因为即使在 DNS(域名服务器)工作不正常或域过期时也可以建立连接。


还有一个建议 - 在新应用程序中使用 mysqli_ 而不是 mysql_ 函数。新功能在使用上非常相似,但更安全。

旧的 mysql_ 函数已过时,不推荐用于新应用程序。由于与旧的、过时的软件(CMS 系统、电子商务系统等)兼容,它们仍然可以在 PHP 中使用

PHP Help 说(关于 mysql_connect):

不鼓励使用此扩展程序。相反,MySQLi 或 PDO_MySQL 应该使用扩展名。


更多关于连接本地主机 - 来自MySQL Reference的信息

在 Unix 上,MySQL 程序特别对待主机名 localhost,在 与其他方式相比,这可能与您期望的方式不同 基于网络的程序。对于到 localhost、MySQL 程序的连接 尝试使用 Unix 套接字文件连接到本地服务器。 即使给出 --port 或 -P 选项来指定端口,也会发生这种情况 数字。确保客户端与客户端建立 TCP/IP 连接 本地服务器,使用 --host 或 -h 指定主机名值 127.0.0.1

注意,“--port”和“-P”选项是在 PHP 以外的其他上下文中描述的,但连接机制的工作原理类似,localhost 是“特殊”名称,不管是这个 PHP、控制台还是其他软件。

【讨论】:

当我使用 localhost 我得到这个输出:Could not connect: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 尝试 127.0.0.1 并阅读我的扩展答案。我解释了为什么它不起作用。【参考方案3】:

您可以使用“localhost”作为主机来引用脚本的系统。

$con = mysql_connect("localhost", "user", "password");

但是,连接到 IP 很可能会失败,因为你有一个小写 L,你应该有一个数字(但我希望问题中的 IP 只是一个例子)。

另外,使用 mysqli 或 PDO 代替即将被弃用的 mysql。

【讨论】:

如果主机提供商为数据库和 Web 使用单独的服务器,这将不起作用 @Svetlio 有效点,尽管它们很可能在同一台服务器上。无论哪种方式,我都在我的答案中添加了关于 l1 的评论。谢谢。 当我使用 localhost 我得到这个输出:Could not connect: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) @CJ7 尝试使用127.0.0.1 而不是localhost 来强制连接使用TCP/IP。另外,请确保 MySQL 正在运行。【参考方案4】:

这个问题的答案取决于您的主机(或其控制面板)如何配置 MySQL 权限。权限是特定于 IP 或主机名的,因此通常通过 IP 或主机名连接可能不会有相同的连接结果。如果有疑问,我会坚持他们给你的设置。

阅读更多:http://dev.mysql.com/doc/refman/5.0/en/account-names.html

【讨论】:

我在 MySQL 管理页面上只能看到服务器的 IP 地址,但我不愿意使用它,因为他们可能会在不通知的情况下更改它。 这是一个有效的担忧。在这种情况下,我会询问您的主机是否有一个稳定的主机名,您可以使用该主机名以相同的权限连接到同一台服务器。【参考方案5】:

这主要取决于您的主机是如何配置的。根据我的经验,您将使用“localhost”、服务器的 IP 地址或主机设置的某种子域。

我首先测试“localhost”,因为这是大多数共享托管环境的默认设置。

$con = mysql_connect("localhost", "username", "password");

【讨论】:

【参考方案6】:

您可以选择数据库服务器的主机名,例如mydbbox.example.com。使用 IP 地址可能会更快,因为不需要 DNS 查找。

另见this SO question。

【讨论】:

以上是关于我应该如何引用 Web 主机上的 MySQL 服务器?的主要内容,如果未能解决你的问题,请参考以下文章