我应该如何引用 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 address
或domain
。
在大多数情况下,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 有效点,尽管它们很可能在同一台服务器上。无论哪种方式,我都在我的答案中添加了关于l
和 1
的评论。谢谢。
当我使用 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 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何引用 Microsoft.Web.Administration?