我想在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
我的代码出了什么问题?
感谢。
答案 0 :(得分:2)
这一行应引用双引号:
$command = 'mysqldump $dbname --password=$dbpass --user=$dbuser --single-transaction >'.$backupFile;
像这样:
$command = "mysqldump $dbname --password=$dbpass --user=$dbuser --single-transaction >".$backupFile;
如果没有,设置$ dbnam,$ dbpass等的变量替换将不会发生
答案 1 :(得分:1)
你得到我们的输出是因为mysqldump语法中有错误。
这是一个很好的语法:
mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]
我会将它作为一个cron作业单独运行,而不是使用PHP。特别是如果db很大。然后,您可能会根据您的php设置获得超时。
答案 2 :(得分:1)
使用正确的参数从命令行尝试mysqldump
命令。它有用吗?报告的错误(如果有)(使用--verbose
开关)?修复它们并重试。
调试命令后,直接将其提交给cron
- 无需通过PHP脚本运行。
答案 3 :(得分:-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();
?>
对于您的连接,您可以使用此文件。
connection.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作业。