我想要一个服务器上的一个网站和另一台服务器上的另一个网站,但只有一个数据库同时使用 php 和 mysql。是否可以?如果是,那怎么办?
6 回答
是的。这是可能的。通常你不会把你的数据库放在远程服务器上。您应该将数据库服务器保留在同一个数据中心,以便使用高速内部网络链接。
如果您的网站位于主机中web1
且web2
数据库位于 中,dbhost1
则使用主机名连接到 mysql 。web1
web2
dbhost1
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
)具有访问权限。
给定正确的设置,您可以连接到远程数据库。
如果做不到这一点,您可以编写一个可以从两个服务器调用的服务层。
在连接到 mysql 数据库时,在两台服务器上使用相同的数据库连接凭据。
是的,为什么不。但对于安全和性能问题,我不会那样做。
问题是您在另一台服务器上的理解是通过 LAN 直接连接的服务器还是在另一个数据中心中的服务器。当服务器位于另一个数据中心时,您可能会遇到很多流量和性能问题。
当服务器直接连接时,您可以更改 my.cnf 并更改行:
bind-address 127.0.0.1
然后可以从外部访问服务器。并且您应该为用户提供足够的权限以从外部连接。
是的,这是可能的。您必须使用可从两台服务器访问的 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);
那应该够了。如果您的托管服务提供商不允许服务器连接到外部服务器(有时端口已关闭),您可能会遇到一些问题。
出于安全原因,您无法连接到未授权托管服务器的 mysql 服务器是很常见的。因此,在 mysql 中,您必须允许用户不仅从本地主机连接,而且还允许从其他主机连接(如果您有足够的权限,您可以通过公平编辑用户权限从 phpMyAdmin 进行连接)。