备份MySql数据库


Backup MySql Database?

我以前问过这个问题,但没有得到答案,所以我正在重新表述。

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

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