大约两周以来,我一直在处理 LAMP 堆栈中最奇怪的问题之一。
长话短说,与 MySQL 服务器的随机连接失败并显示错误消息:
Warning: mysqli::real_connect(): (HY000/2002): Cannot assign requested address in ..
MySQL 位于不同的“盒子”上,托管在 Rackspace Cloud 上
今天我们将其版本降级为
Ver 14.14 Distrib 5.1.42, for debian-linux-gnu (x86_64).
数据库服务器非常忙于处理每秒平均查询数:根据其状态变量,为 5327.957。
MySQL 处于 log-warnings=9 状态,但没有记录连接被拒绝的警告。
假设 1% 的概率,站点和 gearman 工作人员脚本都会因该错误而失败。
根据我们的监控,没有服务器负载似乎不是一个因素。 (CPU负载、IO负载或MySQL负载)
最大数据库连接 (max_connections) 设置为 200,但我们从未处理过超过 100 个同时连接到数据库的情况
使用或不使用防火墙软件都会发生这种情况。
我怀疑 TCP 网络问题而不是 PHP/MySQL 配置问题。
谁能告诉我如何找到它?
UPDATE:
连接代码为:
$this->_mysqli = mysqli_init();
$this->_mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 120);
$this->_mysqli->real_connect($dbHost,$dbUserName, $dbPassword, $dbName);
if (!is_null($this->_mysqli->connect_error)) {
$ping = $this->_mysqli->ping();
if(!$ping){
$error = 'HOST: {'.$dbHost.'};MESSAGE: '. $this->_mysqli->connect_error ."\n";
DataStoreException::raiseHostUnreachable($error);
}
}