MySql命令mysqldump没有执行?

时间:2012-03-23 11:45:39

标签: php mysql mysqldump

所以我使用PHP执行mysql命令来备份/恢复数据库。在localhost上它没有问题,因为我必须查明可执行文件。但在服务器上它不起作用。这就是我使用的PHP代码:

public function backup() {
    $backup = $this->backups.'/'.$this->db_name.'_backup_'.date('Y').'_'.date('m').'_'.date('d').'.sql';
    $cmd = "mysqldump --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name > $backup";
    try {
        system($cmd);
        return $this->encode('Error',false,'Backup Successfuly Complete');
    } catch(PDOException $error) {
        return $this->encode('Error',true,$error->getMessage());
    } 
}

public function restore($backup) {
    $cmd = "mysql --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name < $backup";
    try {
        exec($cmd);
        return $this->encode('Error',false,'Restore successfuly complete');
    } catch(PDOException $error) {
        return $this->encode('Error',true,$error->getMessage());
    } 
}

请对那里的任何变量进行抽象,我想找出为什么命令不在服务器上工作。

如果命令实际执行正确,我该如何检查PHP?因为使用try方法,我总能得到肯定的答案。

1 个答案:

答案 0 :(得分:2)

“请对那里的任何变量进行抽象” - 无论如何我希望你好好利用escapeshellarg()

在webserver进程的上下文中可能找不到没有绝对路径的mysqldump,例如:因为它根本不在其搜索路径中(或根本不存在)。

您可能希望尝试通过在命令中附加2>&1来将STDERR重定向到STDOUT以获取错误消息。