下面介绍mysql数据库备份/恢复的两种方法。
方法一:
query($sql); } //将生成的临时备份文件合在一起 $outfile = date("y-m-d").".sql";
if(file_exists($dbdir.$outfile))
@unlink($dbdir.$outfile);
$fpr = fopen($dbdir.$outfile, "a");
foreach($txtname as $txt){
if(file_exists($dbdir.$txt)){ //读取临时备份文件
$tdata = readfiles($dbdir.$txt); //生成备份文件
$tbl = explode(".", $txt);
$str = ""`.$tbl[0]."`{{".$tdata."}}";
if(fwrite($fpr, $str)){
echo $tbl[0]."...写入 $outfile 成功!n";
}else{
echo $tbl[0]."...写入 $outfile 失败!n"; }
@unlink($dbdir.$txt); }
}
fclose($fpr);
}else{//恢复数据
$tdata = readfiles($dbdir.$_post["sqlfile"]);
preg_match_all("/`(.*)`{{(.*)}}/isu", $tdata, $data_ar);
foreach($data_ar[1] as $k => $tt){
if(empty($data_ar[2][$k])) continue;
$tfile = $dbdir.$tt.".txt";
$fp = fopen($tfile, "w");
if(fwrite($fp, $data_ar[2][$k])){ //清空表
$sql = "truncate table `$tt"`;
$db->query($sql); //重新装入数据
$sql = "load data low_priority infile '".$dbdir.$tt.".txt"."' into table `$tt"`;
if($db->query($sql)){
fclose($fp);
echo $tt."表数据恢复成功!n";
unlink($dbdir.$tt.".txt");
}else{
echo $tt."表数据恢复失败!";
}
}
}
//echo $tdata;
//print_r($data_ar);
//exit;
}
}
/* * 读取文件内容 * 参数 $file 为文件名及完整路径 * 返回文件内容 */
function readfiles($file){
$tdata = ""; $fp = fopen($file, "r");
if(filesize($file) <= 0) return;
while($data = fread($fp, filesize($file))){
$tdata .= $data;
}
fclose($fp); return $tdata; }
?>
方法二:
想在php后台管理直接能够备份数据库,于是想呀想,一直没有什么思路,一开始是考虑用php来访问服务器安装mysql的目录,比如 /usr/local/mysql/data目录,直接把下面对应的文件进行备份,但是出现了问题:
第一、运行php的是apche的用户,比如是nobody,那么它一般是没有权限访问/usr/local/mysql/data目录的。
第二、就算能够访问,那么你如何能够把/usr/local/mysql/data目录下的文件拷贝出来呢?因为mysql在运行的时候是不运行访问的,那么nobody用户有权限停止mysql的服务,不可能!
申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!