【问题标题】:PHP MySQL Connection error - Implementing Retry logicPHP MySQL连接错误 - 实现重试逻辑
【发布时间】:2014-06-16 08:32:39
【问题描述】:

我们看到很多 PHP 和 MYSQL 连接失败问题。有人建议,如果数据库连接不成功,我们应该构建重试逻辑。我已经粘贴了下面的代码和错误信息。

谁能建议在这段代码中实现重试逻辑的最佳方法是什么?任何处理此问题的代码示例?

PHP 警告:mysqli_connect(): [2002] 连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接(尝试通过 tcp://us-cdbr-azure-west 连接-a.cloudapp.net:3306) 在 D:\home\site\wwwroot\xdfdy.php 第 232 行

PHP 警告:mysqli_connect(): (HY000/2002): 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

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;
}   

【问题讨论】:

  • 除了担心重试逻辑之外,您可能首先要专注于找出为什么首先发生这些错误,为什么数据库连接超时是不是很频繁
  • @Hanky웃Panky 这些错误一定会发生,不是因为代码有问题,而是因为共享基础设施。这些是暂时性错误,应用程序的架构应该能够优雅地处理这些错误。

标签: php mysql azure


【解决方案1】:

如果跟随那些已经发明了轮子的人,他们说每次不必要的数据库连接尝试都可能遇到性能问题,也是他们建议你只需要一个数据库实例的原因之一,我会告诉你做不这样做,但是,问题被问到了。

虽然,我以前从未这样做过,但在我看来,您可以递归调用您的函数,直到建立连接

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;
    }

因此,当您的连接出现错误时,该方法将调用自身并仅在跳过 catchif 块(连接已建立)时返回 (true)

【讨论】:

  • 我可以看到这种方法的一个问题是,代码可能永远不会从此函数返回。我建议我们在通话中也加入一些重试次数。我建议查看 CodePlex 的 Transient Fault Handling Enterprise Library Application Block 并在 PHP 中实施类似的策略来处理这些暂时性错误。
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多