1

我想要一个服务器上的一个网站和另一台服务器上的另一个网站,但只有一个数据库同时使用 php 和 mysql。是否可以?如果是,那怎么办?

4

6 回答 6

3

是的。这是可能的。通常你不会把你的数据库放在远程服务器上。您应该将数据库服务器保留在同一个数据中心,以便使用高速内部网络链接。

如果您的网站位于主机中web1web2数据库位于 中,dbhost1则使用主机名连接到 mysql 。web1web2dbhost1

mysqli

$mysqli = new mysqli("dbhost1", "user", "pass");

PDO

$dbh = new PDO('mysql:dbname=dbname;host=dbhost1', "user", "pass");

旧版 mysql 扩展

mysql_connect("dbhost1",  "user", "pass");

注意:确保在数据库中user@web1(在主机上web1)或user@web2(在主机上web2)具有访问权限。

于 2013-01-17T14:21:38.357 回答
1

给定正确的设置,您可以连接到远程数据库。

如果做不到这一点,您可以编写一个可以从两个服务器调用的服务层。

于 2013-01-17T14:17:54.643 回答
0

在连接到 mysql 数据库时,在两台服务器上使用相同的数据库连接凭据。

于 2013-01-17T14:21:35.053 回答
0

是的,为什么不。但对于安全和性能问题,我不会那样做。

问题是您在另一台服务器上的理解是通过 LAN 直接连接的服务器还是在另一个数据中心中的服务器。当服务器位于另一个数据中心时,您可能会遇到很多流量和性能问题。

当服务器直接连接时,您可以更改 my.cnf 并更改行:

bind-address 127.0.0.1

然后可以从外部访问服务器。并且您应该为用户提供足够的权限以从外部连接。

于 2013-01-17T14:22:12.193 回答
0

是的,这是可能的。您必须使用可从两台服务器访问的 mysql 服务器。您只需从两台服务器连接相同的主机/用户/密码:

define("WEBDOMAIN", "94.145.22.15"); //some fake data
define("DEFDBNAME", "my_db");
define("DEFUSERNAME", "my_user");
define("DEFDBPWD", "my_pass");

mysql_connect( WEBDOMAIN, DEFUSERNAME, DEFDBPWD );
mysql_select_db( DEFDBNAME);

那应该够了。如果您的托管服务提供商不允许服务器连接到外部服务器(有时端口已关闭),您可能会遇到一些问题。

于 2013-01-17T14:22:56.653 回答
0

出于安全原因,您无法连接到未授权托管服务器的 mysql 服务器是很常见的。因此,在 mysql 中,您必须允许用户不仅从本地主机连接,而且还允许从其他主机连接(如果您有足够的权限,您可以通过公平编辑用户权限从 phpMyAdmin 进行连接)。

于 2013-01-17T14:41:24.713 回答