我以前问过这个问题,但没有得到答案,所以我正在重新表述。
我想使用以下任一项备份数据库:
system("mysqldump -h DB_HOST -u DB_USER -p DB_PASS logindb > $location/$backup");
或:
sql="BACKUP my_db TO DISK my_backup_folder WITH FORMAT #";
if ($stmt = $this->connect->prepare($sql)) {
$stmt->execute();
$stmt->close();
} else {
$error = true;
$message['error'] = true;
$message['message'] = CANNOT_PREPARE_DATABASE_CONNECTION_MESSAGE;
return json_encode($message);
}
但是第一个给了我一个空的sql文件,第二个什么也没给。为什么会这样,如果有办法找出发生了什么错误,我该怎么做?
还有哪种方法更好?
在这里找到了一些更简单的代码
方法1:
$tableName = 'mypet';
$backupFile = 'backup/mypet.sql';
$query = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysql_query($query);
方法2:
$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz';
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile";
system($command);
开始帖子:
-p DB_PASS
正确的形式:
-p[password]
我不知道为什么,但-p又是密码,不等于其他参数。所以要注意,你很好地理解了这些例子。我看到过不同的情况,这就是问题所在,所以请注意。
使用try-catch,类似于:
try{
$stmt = $this->connect->prepare($sql);
$stmt->execute();
$stmt->close();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
检查日志文件中的错误。
如果您拥有php的exec权限,第一个会更快。
请检查SQL错误日志文件。
/var/log/mysql.err-mysql错误日志文件
/var/log/mysql.log-mysql日志文件
对于php,您可以将error_reporting(E_ALL);
设置为抛出php错误(如果有的话)。
请确保用户具有访问此数据库的权限。
以下是备份mysql数据库的命令
mysqldump -h [host_name] -u [username] -p[password] [database_name] > dumpfilename.sql