我有一个主数据库和从数据库,每5分钟通过以下代码对其进行检查。每晚大约30分钟(午夜之后,因此应该是低负载),从属DB在我正在检查的表中没有结果。
MysqliWrapper只是Mysqli类的包装器,用于提供单例和查询生成。生成的查询只是select * from LogTable order by id DESC limit 0,1
我添加了检查以查看是否存在连接错误或查询错误,在发生这种情况时,两者均未记录任何内容。
我尝试从其他表中进行选择,这样可以很好地返回结果,还尝试了select now()
,所有这些方法都有效。
<?php
$masterDB = MysqliWrapper::singleton('host1', 'username', 'password', 'dbname');
$slaveDB = MysqliWrapper::singleton('host2', 'username', 'password', 'dbname');
if ($masterDB->connect_errno) {
Log::error('masterDB error: '.$masterDB->connect_error);
}
if ($slaveDB->connect_errno) {
Log::error('slaveDB error: '.$slaveDB->connect_error);
}
$filters = [];
$limits = [0, 1];
$orderBy = 'id DESC';
$masterLog = LogTable::staticFind($filters, $limits, $orderBy);
if(empty($masterLog)) {
Log::error('masterDB query: no results found');
}
if ($masterDB->errno) {
Log::error('masterDB query error: '.$masterDB->error);
}
$registry = new Registry();
$registry->set('customDb', $slaveDB);
$slaveLog = LogTable::staticFind($filters, $limits, $orderBy);
if(empty($slaveLog)) {
Log::error('slaveDB query: no results found');
}
if ($slaveDB->errno) {
Log::error('slaveDB query error: '.$slaveDB->error);
}
正如我说的那样,这一天中有95%的时间都可以正常工作,但是在大约凌晨1点30分钟内从slaveDB中选择任何内容失败,然后又开始正常工作。没有错误记录,反正什么也找不到。