我之前已经问过这个问题,但我没有得到答案,所以我正在改写它。
我想使用以下任一方式备份数据库:
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文件,第二个给了我什么。为什么会这样,如果有办法找出发生了什么错误,我该怎么做?
哪种方法更好?
答案 0 :(得分:1)
使用try-catch,例如:
try{
$stmt = $this->connect->prepare($sql);
$stmt->execute();
$stmt->close();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
检查日志文件是否有错误。
答案 1 :(得分:1)
开始帖子:
-p DB_PASS
正确的形式:
-p[password]
我不知道为什么,但-p再次是密码,不等于其他参数。所以要注意你很好地接管了这些例子。我已经看到了不同的情况,这就是问题所以请注意它。
答案 2 :(得分:1)
找到一些更简单的代码here
方法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);
答案 3 :(得分:0)
如果你有php的exec权限,第一个会更快。
检查SQL错误日志文件。
/var/log/mysql.err - MySQL错误日志文件
/var/log/mysql.log - MySQL日志文件
对于php,如果有的话,你可能会把error_reporting(E_ALL);
放到php错误中。
答案 4 :(得分:0)
确保用户拥有此数据库的权限。
以下是备份mysql数据库的命令
mysqldump -h [host_name] -u [username] -p[password] [database_name] > dumpfilename.sql