1
2 global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb;3 $mysqlhost=""; //host name
4 $mysqluser=""; //login name
5 $mysqlpwd=""; //password
6 $mysqldb=""; //name of database
7
8 include("mydb.php");9 $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);10 /*--------------界面--------------*/if(!$_POST['act']){/*----------------------*/
11 $msgs[]="服务器备份目录为backup";12 $msgs[]="对于较大的数据表,强烈建议使用分卷备份";13 $msgs[]="只有选择备份到服务器,才能使用分卷备份功能";14 show_msg($msgs);15 ?>
16
17
18
数据备份19
备份方式20
备份全部数据备份全部数据表中的数据到一个备份文件21
备份单张表数据22 请选择23
24 $d->query("show table status from $mysqldb");25 while($d->nextrecord()){26 echo "".$d->f('Name')."";}27 ?>
28
备份选中数据表中的数据到单独的备份文件29
使用分卷备份30
31 分卷备份 K
32
选择目标位置33
备份到服务器34 备份到本地
35
36
37 /*-------------界面结束-------------*/}/*---------------------------------*/
38 /*----*/else{/*--------------主程序-----------------------------------------*/
39 if($_POST['weizhi']=="localpc"&&$_POST['fenjuan']=='yes')40 {$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";41 show_msg($msgs); pageend();}42 if($_POST['fenjuan']=="yes"&&!$_POST['filesize'])43 {$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小";44 show_msg($msgs); pageend();}45 if($_POST['weizhi']=="server"&&!writeable("./backup"))46 {$msgs[]="备份文件存放目录'./backup'不可写,请修改目录属性";47 show_msg($msgs); pageend();}48
49 /*----------备份全部表-------------*/if($_POST['bfzl']=="quanbubiao"){/*----*/
50 /*----不分卷*/if(!$_POST['fenjuan']){/*--------------------------------*/
51 if(!$tables=$d->query("show table status from $mysqldb"))52 {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}53 $sql="";54 while($d->nextrecord($tables))55 {56 $table=$d->f("Name");57 $sql.=make_header($table);58 $d->query("select * from $table");59 $num_fields=$d->nf();60 while($d->nextrecord())61 {$sql.=make_record($table,$num_fields);}62 }63 $filename=date("Ymd",time())."_all.sql";64 if($_POST['weizhi']=="localpc") down_file($sql,$filename);65 elseif($_POST['weizhi']=="server")66 {if(write_file($sql,$filename))67 $msgs[]="全部数据表数据备份完成,生成备份文件'./backup/$filename'";68 else $msgs[]="备份全部数据表失败";69 show_msg($msgs);70 pageend();71 }72 /*-----------------不要卷结束*/}/*-----------------------*/
73 /*-----------------分卷*/else{/*-------------------------*/
74 if(!$_POST['filesize'])75 {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}76 if(!$tables=$d->query("show table status from $mysqldb"))77 {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}78 $sql=""; $p=1;79 $filename=date("Ymd",time())."_all";80 while($d->nextrecord($tables))81 {82 $table=$d->f("Name");83 $sql.=make_header($table);84 $d->query("select * from $table");85 $num_fields=$d->nf();86 while($d->nextrecord())87 {$sql.=make_record($table,$num_fields);88 if(strlen($sql)>=$_POST['filesize']*1000){89 $filename.=("_v".$p.".sql");90 if(write_file($sql,$filename))91 $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";92 else $msgs[]="备份表-".$_POST['tablename']."-失败";93 $p++;94 $filename=date("Ymd",time())."_all";95 $sql="";}96 }97 }98 if($sql!=""){$filename.=("_v".$p.".sql");99 if(write_file($sql,$filename))100 $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";}101 show_msg($msgs);102 /*---------------------分卷结束*/}/*--------------------------------------*/
103 /*--------备份全部表结束*/}/*---------------------------------------------*/
104
105 /*--------备份单表------*/elseif($_POST['bfzl']=="danbiao"){/*------------*/
106 if(!$_POST['tablename'])107 {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();}108 /*--------不分卷*/if(!$_POST['fenjuan']){/*-------------------------------*/
109 $sql=make_header($_POST['tablename']);110 $d->query("select * from ".$_POST['tablename']);111 $num_fields=$d->nf();112 while($d->nextrecord())113 {$sql.=make_record($_POST['tablename'],$num_fields);}114 $filename=date("Ymd",time())."_".$_POST['tablename'].".sql";115 if($_POST['weizhi']=="localpc") down_file($sql,$filename);116 elseif($_POST['weizhi']=="server")117 {if(write_file($sql,$filename))118 $msgs[]="表-".$_POST['tablename']."-数据备份完成,生成备份文件'./backup/$filename'";119 else $msgs[]="备份表-".$_POST['tablename']."-失败";120 show_msg($msgs);121 pageend();122 }123 /*----------------不要卷结束*/}/*------------------------------------*/
124 /*----------------分卷*/else{/*--------------------------------------*/
125 if(!$_POST['filesize'])126 {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}127 $sql=make_header($_POST['tablename']); $p=1;128 $filename=date("Ymd",time())."_".$_POST['tablename'];129 $d->query("select * from ".$_POST['tablename']);130 $num_fields=$d->nf();131 while ($d->nextrecord())132 {133 $sql.=make_record($_POST['tablename'],$num_fields);134 if(strlen($sql)>=$_POST['filesize']*1000){135 $filename.=("_v".$p.".sql");136 if(write_file($sql,$filename))137 $msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";138 else $msgs[]="备份表-".$_POST['tablename']."-失败";139 $p++;140 $filename=date("Ymd",time())."_".$_POST['tablename'];141 $sql="";}142 }143 if($sql!=""){$filename.=("_v".$p.".sql");144 if(write_file($sql,$filename))145 $msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";}146 show_msg($msgs);147 /*----------分卷结束*/}/*--------------------------------------------------*/
148 /*----------备份单表结束*/}/*----------------------------------------------*/
149
150 /*---*/}/*-------------主程序结束------------------------------------------*/
151
152 function write_file($sql,$filename)153 {154 $re=true;155 if(!@$fp=fopen("./backup/".$filename,"w+")) {$re=false; echo "failed to open target file";}156 if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}157 if(!@fclose($fp)) {$re=false; echo "failed to close target file";}158 return $re;159 }160
161 function down_file($sql,$filename)162 {163 ob_end_clean();164 header("Content-Encoding: none");165 header("Content-Type: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));166
167 header("Content-Disposition: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ')."filename=".$filename);168
169 header("Content-Length: ".strlen($sql));170 header("Pragma: no-cache");171
172 header("Expires: 0");173 echo $sql;174 $e=ob_get_contents();175 ob_end_clean();176 }177
178 function writeable($dir)179 {180
181 if(!is_dir($dir)) {182 @mkdir($dir, 0777);183 }184
185 if(is_dir($dir))186 {187
188 if($fp = @fopen("$dir/test.test", 'w'))189 {190 @fclose($fp);191 @unlink("$dir/test.test");192 $writeable = 1;193 }194 else{195 $writeable = 0;196 }197
198 }199
200 return $writeable;201
202 }203
204 function make_header($table)205 {global $d;206 $sql="DROP TABLE IF EXISTS ".$table."\n";207 $d->query("show create table ".$table);208 $d->nextrecord();209 $tmp=preg_replace("/\n/","",$d->f("Create Table"));210 $sql.=$tmp."\n";211 return $sql;212 }213
214 function make_record($table,$num_fields)215 {global $d;216 $comma="";217 $sql .= "INSERT INTO ".$table." VALUES(";218 for($i = 0; $i < $num_fields; $i++)219 {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";}220 $sql .= ")\n";221 return $sql;222 }223
224 function show_msg($msgs)225 {226 $title="提示:";227 echo "
".$title." |
|
237 functionpageend()238 {239 exit();240 }241 ?>