如果主数据库已关闭,如何连接到辅助数据库 (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;
}
}
我希望有人能帮助我,我已经为此苦苦挣扎了 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;
}
}