备份MySql数据库?

时间:2012-01-30 10:59:41

标签: php mysql backup

我之前已经问过这个问题,但我没有得到答案,所以我正在改写它。

我想使用以下任一方式备份数据库:

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文件,第二个给了我什么。为什么会这样,如果有办法找出发生了什么错误,我该怎么做?

哪种方法更好?

5 个答案:

答案 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