动态创建数据库备份

时间:2011-04-06 15:32:33

标签: php mysql symfony1 backup

我想在我的应用中有一个链接,允许我下载我的数据库转储。 (àla phpmyadmin,服务器上没有任何内容保存)。

(我以为我会使用 php:// temp 来避免在服务器上保存内容)

但是如何创建转储文件?我看到它的方式我有两个选择:

1]使用system()和mysqldump

$command = `mysqldump -u [username] -p [password] [databasename] | gzip > db.sql.gz`;

但如何在php:// temp?

上编写转储

2]自己创建文件并将其写入php:// temp

$tables = mysql_query ("SHOW TABLES");

while ($i = mysql_fetch_array($tables))
{
  $i = $i['Tables_in_'.$dbname];

  $create = mysql_fetch_array(mysql_query ("SHOW CREATE TABLE ".$i));
  echo("\n# -------------------------------------------------------- \n");
  echo("\n# \n# Table structure for table `".$create['Table']."` \n# \n");

  echo("\n".$create['Create Table'].";\n\n");

  echo("# \n# Dumping data for table `".$create['Table']."` \n# \n\n");

  $sql = mysql_query ("SELECT * FROM ".$i);
  if (mysql_num_rows($sql)) {
      while ($row = mysql_fetch_row($sql)) {
          foreach ($row as $j => $k) {
              $row[$j] = "'".mysql_escape_string($k)."'";
          }

          echo("INSERT INTO $i VALUES(".implode(",", $row).");\n");
      }    
  }
}

我应该走哪条路?

3 个答案:

答案 0 :(得分:5)

你应该采取的第一个选择

mysqldump旨在为数据库备份或创建sql文件。

一个例子

    $command = "mysqldump -u ".USER." -p'".PASSWORD."'  ".DATABASE." ". $value."  -r \"".$backupPath."/".$backupFile."\" 2>&1";

    $res=system($command);

答案 1 :(得分:1)

我也会使用第一个选项。将它放在.sh文件中,使其可执行并在cron作业上随意运行它。我的VPS上有类似的东西每天早上9点运行。

答案 2 :(得分:1)

我会使用第一个选项,将其保存到服务器上的/tmp(或其他),并在命令之后添加如下内容:

header('Content-Type: application/gzip');
header('Content-Disposition: attachment; filename="db.sql.gz"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
readfile('/tmp/db.sql.gz');

开始自动下载。