我尝试使用mysqldump制作简单的PHP脚本来备份数据库,但是我收到了这个错误:
mysqldump: Couldn't find table: ">"
这是我写作的功能:
protected function dump($params, $dbs, $backup_folder)
{
if (!is_writable($backup_folder)) {
throw new Exception(sprintf('The backup folder is not writable: %s',
$backup_folder));
}
$backup_folder = trim($backup_folder, "/"); // be sure that there is no / at the end
$baseCmd = 'mysqldump --hex-blob --routines --skip-lock-tables -h%s -u%s -p%s %s > %s';
foreach ($dbs as $db) {
$dest = sprintf('%s/%s', $backup_folder,
$db . '_' . date('YmdHis') . '.sql');
$cmd = sprintf($baseCmd, $params['host'], $params['user'],
$params['password'], $db, $dest);
echo "Exec: $cmd: ";
$last = system(escapeshellcmd($cmd), $res);
echo $res;
if ( 0 !== $res) {
echo "Fail";
} else {
echo "Done \n";
}
}
}
此功能打印的命令提供:
mysqldump --hex-blob --routines --skip-lock-tables -hdb-backup -uroot -pMyPwd my_db_name > backups/my_db_name_20151010232734.sql
当我从Shell执行此命令时,它的效果非常好,但不是来自Php脚本。
我的配置是:
任何帮助?
谢谢
答案 0 :(得分:1)
escapeshellcmd()
命令会将\
添加到>
。
以下字符前面加一个反斜杠:#&amp ;;` | *?〜<> ^()[] {} $ \,\ x0A和\ xFF。
您应该使用escapeshellarg()
单独转义每个参数,或者确保您的方法参数($params
,$db
和$backup_folder
)有效并且不要t包含其中一个字符,只需使用
system($cmd, $res)
我希望这有帮助!