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

时间:2017-11-20 23:56:18

标签: php mysql database wampserver failover

我希望有人可以帮助我,我已经为此奋斗了3天了。

这是我的情况,我正在建立一个带有php的网站,我有两台计算机作为wampserver的服务器......

主服务器是192.168.0.10

辅助服务器是192.168.0.12

和虚拟机,如果远程连接工作,我试用

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

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

它工作正常,我甚至掌握了在服务器上掌握复制的功能。

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

$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和JS \ Procesoalumno.php

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

使用@禁止显示错误消息是一个坏主意,也是一个坏习惯。更好的解决方案是将mysqli设置为在失败时引发异常并捕获异常。

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

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

通过使用异常来抑制错误,如果需要特定的处理或日志记录,则可以提取相关的错误消息和错误代码,其方式比抑制错误要干净得多。

尽管它看起来可能更复杂,但原因是我们还测试了第二个连接(无论您如何进行连接,无论如何,您都应该这样做)-然后我们测试第二个连接连接,方法与测试第一个连接相同,即在第一个try/catch块中添加第二个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;
    }
}