PHP MySQL连接错误-实现重试逻辑
我们看到很多PHP和MYSQL连接失败的问题。有人建议,如果数据库连接不成功,我们应该构建重试逻辑。我已将代码和错误消息粘贴到下面 有人能告诉我在这段代码中实现重试逻辑的最佳方法是什么吗?有处理这个问题的代码示例吗 PHP警告:mysqli_connect():[2002]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立了连接(尝试通过tcp://us-cdbr-azure-west-a.cloudapp.net:3306)在第232行的D:\home\site\wwwroot\xdfdy.php中 PHP警告:mysqli_connect():(HY000/2002):连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应PHP MySQL连接错误-实现重试逻辑,php,mysql,azure,Php,Mysql,Azure,我们看到很多PHP和MYSQL连接失败的问题。有人建议,如果数据库连接不成功,我们应该构建重试逻辑。我已将代码和错误消息粘贴到下面 有人能告诉我在这段代码中实现重试逻辑的最佳方法是什么吗?有处理这个问题的代码示例吗 PHP警告:mysqli_connect():[2002]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立了连接(尝试通过tcp://us-cdbr-azure-west-a.cloudapp.net:3306)在第232行的D:\home\site\wwwroot\xdf
public function connect_to_mysqldb () {
try
{
$this->conn = mysqli_connect('us-cdbr-azure-west-a.cloudapp.net','xxxxx','password', 'dbname');
}
catch (DbException $e) {
return false;
}
// Check connection
if (mysqli_connect_errno($this->conn ))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
return false;
}
return true;
}
如果跟随发明轮子的人,他们说每一次不必要的DB连接尝试都可能会遇到性能问题,这也是他们建议您只需要一个数据库实例的原因之一,我会告诉您不要这样做,但问题是 虽然我以前从未这样做过,但在我看来,在建立连接之前,您可以递归调用函数
public function connect_to_mysqldb () {
try
{
$this->conn = mysqli_connect('us-cdbr-azure-west-a.cloudapp.net','xxxxx','password', 'dbname');
}
catch (DbException $e) {
// write into logs maybe?
$this->connect_to_mysqldb();
}
// Check connection (maybe unreachable because of the catch block?)
if (mysqli_connect_errno($this->conn ))
{
$this->connect_to_mysqldb();
}
return true;
}
因此,当您的连接有错误时,该方法将调用自身并仅在跳过
catch
和块时返回(true)
如果块被跳过(连接已建立)除了担心重试逻辑外,您可能首先希望了解这些错误发生的原因,为什么数据库连接超时如此严重often@Hanky웃这些错误一定会发生,不是因为代码出了问题,而是因为共享的基础设施。这些都是暂时性错误,应用程序的架构应该能够优雅地处理这些错误。我建议我们在通话中加入重试次数,同时进行一些睡眠。我建议查看CodePlex上的瞬时故障处理企业库应用程序块
,并在PHP中实现类似的策略来处理这些瞬时错误。