如果主数据库已关闭,如何连接到辅助数据库 (PHP)

how to conect to secondary database if primary database is down (PHP)

我希望有人能帮助我,我已经为此苦苦挣扎了 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): 无法建立连接,因为目标机器主动拒绝。在 C:\wamp64\www\PaginaV2\Pagina\PHP y JS\Procesoalumno.php 第 2

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

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

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

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

使用 @ 来抑制错误消息是一个坏主意,也是一种不好的做法。更好的解决方案是将 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;
    }
}