【发布时间】:2016-04-29 17:14:09
【问题描述】:
以下是我在互联网上找到的使用 php 获取数据库备份的代码。代码在本地主机中运行良好。但是当它在在线服务器中时,它不能正常工作。它创建一个数据库 .sql 文件,但该文件为空。问题是什么??我认为这是服务器权限问题。我怎样才能让这个代码在我的在线服务器上工作。??? :(
<?php
$con = mysqli_connect("localhost","root","","dhn_online_db");
$tables = array();
$query = mysqli_query($con, 'SHOW TABLES');
while($row = mysqli_fetch_row($query)){
$tables[] = $row[0];
}
$result = "";
foreach($tables as $table){
$query = mysqli_query($con, 'SELECT * FROM '.$table);
$num_fields = mysqli_num_fields($query);
$result .= 'DROP TABLE IF EXISTS '.$table.';';
$row2 = mysqli_fetch_row(mysqli_query($con, 'SHOW CREATE TABLE '.$table));
$result .= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysqli_fetch_row($query)){
$result .= '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])){
$result .= '"'.$row[$j].'"' ;
}else{
$result .= '""';
}
if($j<($num_fields-1)){
$result .= ',';
}
}
$result .= ");\n";
}
}
$result .="\n\n";
}
//Create Folder
$folder = 'Backup_Files/';
if (!is_dir($folder))
mkdir($folder, 0777, true);
chmod($folder, 0777);
$date = date('m-d-Y');
$filename = $folder."db_backup_".$date;
echo $filename;
$handle = fopen($filename.'.sql','w+');
fwrite($handle,$result,0777);
fclose($handle);
?>
【问题讨论】:
-
您在脚本开头缺少
error_reporting(E_ALL);。添加我提到的代码,看看是否有任何特定的行产生错误。 -
我想知道你为什么要在 PHP 中实现
mysqldump。整个事情都是用一个命令完成的,比如mysqldump db > backup$(date +%F_%T).sql -
PHPMyAdmin 中有导出功能,如果您可以使用的话。
-
@RuslanOsmanov 请告诉我该怎么做。比如获取备份的确切代码是什么。
-
@ChinthakaUdayasiri,对于您的示例,命令将类似于
mysqldump -hlocalhost -uroot dhn_online_db > ~/Backup_Files/db_backup_$(date +%m-%d-%Y).sql(注意,可以使用-p选项指定密码)。将此命令放入crontab(需要一个正在运行的cron 守护程序),如@daily this-command。你就完成了。
标签: php database mysqli backup