0

我想在 webserver 中有数据库备份 cron,我使用以下代码输出 sql 文件:

<?php
include('connectdb.php');

$backupFile = 'database_backup_'.date("YmdHis").'.sql';
$command = 'mysqldump $dbname --password=$dbpass --user=$dbuser --single-transaction >'.$backupFile;
system($command);

include('closedb.php');
?>

但是当我打开特定的 sql 文件时,它只显示如下文本:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

我的代码有什么问题?

谢谢。

4

4 回答 4

2

这行应该用双引号引起来:

$command = 'mysqldump $dbname --password=$dbpass --user=$dbuser --single-transaction >'.$backupFile;

像这样:

$command = "mysqldump $dbname --password=$dbpass --user=$dbuser --single-transaction >".$backupFile;

如果没有,设置 $dbnam、$dbpass 等的变量替换将不会发生

于 2013-06-17T09:02:08.997 回答
1

您得到我们的输出是因为 mysqldump 语法有错误。

这是一个很好的语法:

mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]

我会单独将其作为 cron 作业运行,而不是使用 PHP。特别是如果数据库很大。然后,您可能会根据您的 php 设置超时。

于 2013-06-17T09:03:34.977 回答
1

mysqldump使用正确的参数从命令行尝试您的命令。它有效吗?它报告什么错误,如果有的话(使用--verbose开关)?修复它们并重试。

调试完命令后,直接将其提交给cron- 无需通过 PHP 脚本运行它。

于 2013-06-18T02:50:36.607 回答
1

如果您的站点是实时的并且使用数据库,那么定期备份您的数据库非常重要。但不可能每次都手动进行备份。因此,让我们创建一个简单的 PHP 函数来为我们完成这项工作,我们可以使用 Cron Job 定期调用该函数。

<?php
include("connection.php");
function backup_db(){
  /* Store All Table name in an Array */

$allTables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)){
 $allTables[] = $row[0];
}
foreach($allTables as $table){
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE IF EXISTS '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)){
   $return.= 'INSERT INTO '.$table.' VALUES(';
 for($j=0; $j<$num_fields; $j++){
   $row[$j] = addslashes($row[$j]);
   $row[$j] = str_replace("\n","\\n",$row[$j]);
   if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } 
   else { $return.= '""'; }
   if ($j<($num_fields-1)) { $return.= ','; }
 }
   $return.= ");\n";
}
}
$return.="\n\n";
}
// Create Backup Folder
$folder = 'DB_Backup/';
if (!is_dir($folder))
mkdir($folder, 0777, true);
chmod($folder, 0777);
$date = date('m-d-Y-H-i-s', time()); 
$filename = $folder."db-backup-".$date; 
$handle = fopen($filename.'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
// Call the function
backup_db();
?>

对于您的连接,您可以使用此文件。

连接.php 文件

<?php
  $host="localhost";
  $uname="YourUserName";
  $pass="YourPassword";
  $database = "YourDatabaseName";
  $connection=mysql_connect($host,$uname,$pass);
or die("Database Connection Failed");
$selectdb=mysql_select_db($database) or die("Database could not be selected"); 
$result=mysql_select_db($database)
or die("database cannot be selected <br>");
?>

将上述代码保存在 PHP 文件中并将文件上传到您的 Web 服务器,然后运行该文件。并检查它是否创建了一个名为 DB_Backup 的文件夹并在 DB_Backup 文件夹中创建备份 .sql 文件。如果文件工作正常,那么您可以将文件分配给您的 Cron 作业。

于 2016-02-18T09:34:34.133 回答