我想在我的应用中有一个链接,允许我下载我的数据库转储。 (à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");
}
}
}
我应该走哪条路?
答案 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');
开始自动下载。