【问题标题】:how to conect to secondary database if primary database is down (PHP)如果主数据库关闭(PHP),如何连接到辅助数据库
【发布时间】:2018-05-04 07:50:03
【问题描述】:

我希望有人可以帮助我,我已经为此苦苦挣扎了 3 天。

这是我的情况,我正在使用 php 制作网站,并且我有 2 台计算机作为带有 wampserver 的服务器...

主服务器是 192.168.0.10

辅助服务器是 192.168.0.12

还有一个我正在尝试远程连接是否有效的虚拟机

我的网站托管在我的主服务器上,因此 conexion 查询是...

$conexion = mysqli_connect("localhost","root","","dbdaq");

它工作正常,我什至在服务器上有主对主复制。

但我需要做的是,当主服务器关闭时,它需要尝试连接到辅助数据库上的数据库,所以我尝试使用代码...

$conexion = mysqli_connect("localhost","root","","dbdaq");


if (!$conexion){
    $conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
}

但是当我手动关闭主服务器上的 mysql 服务时,它实际上并没有尝试使用其他服务器的数据库...

它一直给我说的错误

警告:mysqli_connect(): (HY000/2002): 由于目标机器主动拒绝,无法建立连接。在第 2 行的 C:\wamp64\www\PaginaV2\Pagina\PHP y JS\Procesoalumno.php 中

【问题讨论】:

  • 你确定它不使用它吗?无论如何,您都会收到警告。
  • 看起来您需要尝试捕获返回的确切错误,因为被主动拒绝不会触发您尝试捕获的错误。
  • 你们会怎么做呢?我真的看不到错误。我一直在寻找几天,但我找不到任何东西。
  • 您的代码正在运行,它只是显示警告。摆脱警告:stackoverflow.com/questions/17208678/…

标签: php mysql database wampserver failover


【解决方案1】:

使用@ 来抑制错误消息是一个坏主意,也是一个不好的做法。更好的解决方案是设置 mysqli 在失败时抛出异常,并捕获异常。

您可以通过在建立连接之前添加以下行来设置 mysqli 以引发异常。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

使用异常而不是抑制错误,您可以提取相关的错误消息和错误代码(如果您需要它们进行特定处理或记录),其方式比抑制错误更简洁。

虽然它可能看起来更复杂,但其原因是我们还测试了第二个连接(无论如何您都应该这样做,无论 如何 进行) - 我们测试第二个连接与我们测试第一个连接的方式相同,通过第一个 catch 块内的第二个 try/catch

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // errors in MySQLi now throws exceptions

try {
    $conexion = mysqli_connect("localhost","root","","dbdaq");
} catch (Exception $e) {
    try {
        $conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
    } catch (Exception $e) {
        echo "Connecting to both databases failed";
        exit;
    }
}

【讨论】:

  • 如果我在第一次尝试条件下使用另一个服务器 IP,而不是 localhost,它会给我网关超时错误
【解决方案2】:

试试这个:使用 php 的 @ 运算符(error control operator)来抑制第一次连接失败的错误消息。试试这个。

$conexion = @mysqli_connect("localhost","root","","dbdaq");

if ( !$conexion ) {
    $conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
}

您的故障转移连接代码似乎可以正常工作,但您仍然会收到令人讨厌的错误消息。 @ 运算符会隐藏消息。

【讨论】:

  • 我认为它以某种方式工作,现在它说用户的访问被拒绝,但我知道我不知道为什么,因为另一台服务器具有相同的用户和所有权限
  • 感谢一切,@ 实际上帮助了我很多,我设法修复了被拒绝的访问权限,我刚刚在另一个数据库上创建了另一个用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 2013-09-02
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多