我应该如何引用 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 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用图形化工具远程管理 Linux 上的 MySQL

如何引用 Microsoft.Web.Administration?

本地机器上的 Web 服务器,有啥陷阱吗?

安全地将 MS Access 数据库前端连接到 Web 主机上的 MySQL 后端?

如何设置 docker 容器以通过主机名相互引用?

Telnet 在端口 (443) 上被阻止,但仍允许同一主机和端口上的 Web 服务请求