我每晚在我的 Web 服务器上运行一个 cron 脚本来拍摄我所有数据库的快照,然后将其存储在 S3 上。
我运行的文件在 github > phpMyS3backup
大部分时间它运行良好,但其他时候我得到一个Fatal error: Call to a member function fetch() on a non-object in ~/phpMyS3backup.php on line 30
.
这发生在这一点:
$GLOBALS['con']= new PDO('mysql:host='.DB_HOST, DB_USER, DB_PASS);
try {
$res = $GLOBALS['con']->query("SHOW DATABASES");
while($row = $res->fetch()){
if($row['Database'] != "information_schema"){
$alldb[] = $row['Database'];
deb("Database found: {$row['Database']}");
}
}
}
几个问题:
为什么会失败?如果在脚本运行时正在访问任何站点,那会停止脚本运行并导致错误吗?就像我说的,很多时候它有效,其他时候则无效。
将 fetch 放入循环中是否安全,以便如果确实失败,它会再次尝试?还是会陷入无限循环,或者有其他性能问题?