<?php//2007-9-4/* 数据库备份流程 1.选择要备份的表,设置相关参数 提交 2.循环要备份的表 得到当前表 结构 得到当前表 数据 如果是分卷备份 得到 3. */include("inc/mysql.php");include("inc/function.php");set_time_limit(0); //设定该页最久执行时间。define("PASSWD","ggg123"); //设置的备份密码$dsnArray = require('config.php');$db_obj = new sql_db($dsnArray['host'], $dsnArray['user'], $dsnArray['pass'], $dsnArray['dbname'], $dsnArray['pconnect']);if (!$db_obj){ show_error("连接数据库失败,请正确配置 config.php 文件!"); die();} if(is_post()) //提交表单后{ if ($_POST['password'] <> constant("PASSWD")) { show_error("密码不正确!"); die(); } if (empty($_POST['tablename'])) { show_error("请选择要备份的数据表"); die(); } if($_POST["is_vol"]) //分卷 if (!$_POST['vol_size']) { show_error("请填写备份文件分卷大小"); die(); }$start_time = get_microtime();$back_path = "./backup/"; //备份路径$pre_file = $dsnArray['dbname'].date("Ymd", time()); //文件名前辍$exte_file = ".txt"; //文件扩展名$file_name = $pre_file.$exte_file; //保存成的文件名$fp=fopen($back_path.$file_name, "wb+");if(!$fp){ show_error($back_path.$file_name." 文件打开失败!"); die();}//$_POST['tablename'] = array("ynjob_news","ynjob_puser","ynjob_company","ynjob_cjobinfo");$sql="";$curr_len = 0; //保存当前写入到文件的长度$vol_numb = 1; //保存当前卷序号//$is_vol = true;//$vol_size = 1000; //每卷文件大小 ?Kforeach($_POST['tablename'] as $table) //循环所有选中表{ $table = trim($table); if(empty($table)) continue; echo "<br /> reading ".$table." ... "; //写表结构到文件 fwrite($fp,get_sql_struct($db_obj,$table));//产生 DROP TABLE CREATE TABLE 代码 得到表结构 $db_obj->sql_query("select * from $table"); //得到数据 while ($record = $db_obj->sql_fetchrow()) { $sql=get_sql_insert($db_obj,$table, $record); //产生 INSERT 语句 if($_POST["is_vol"]) //分卷 { $curr_len += strlen($sql); if($curr_len >= $_POST["vol_size"] * 1000) //超过大小 重新打开新卷 { fclose($fp); echo " [save ok] <a href='".$back_path.$file_name."' target='_blank'> 下载 </a>"; echo "<br />... creat vol ".$vol_numb." "; $file_name = $pre_file."_v".$vol_numb.$exte_file; //保存成的文件名 $fp=fopen($back_path.$file_name, "wb+"); $vol_numb++; $curr_len = 0; } } fwrite($fp,$sql); } //flush();}fclose($fp);echo " [save ok] <a href='".$back_path.$file_name."' target='_blank'> 下载 </a><br/>"; echo "<script language=javascript>alert(" 备份结束! ");</script><a title=返回上一页 href=javascript:history.go(-1)><<<返回上一页</a>";echo pass_time($start_time);}else {?><form name="form1" method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <table width="99%" bordercolorlight="#888888" bordercolordark="#FFFFFF" cellpadding="1" cellspacing="1" border=1> <tr align="center" class='header'><td colspan="2">数据备份</td></tr> <tr><td align="center"><select name="tablename[]" size="12" multiple="MULTIPLE"> <option value="">-----------请选择要备份的表-----------</option> <?$db_obj->sql_query("show table status from ".$dsnArray['dbname']);while ($record = $db_obj->sql_fetchrow()){ echo"<option value='".$record['Name']."'>".$record['Name']."</option>";}?> </select></td><td><table width="99%" border="1" cellpadding="1" cellspacing="1" bordercolorlight="#888888" bordercolordark="#FFFFFF"> <tr> <td colspan="2">使用分卷备份</td> </tr> <tr> <td colspan="2"><input type="checkbox" name="is_vol" value=1 /> 分卷备份 <input name="vol_size" type="text" size="10" value="1000" /> K</td> </tr> <tr> <td colspan="2">选择目标位置</td> </tr> <tr> <td colspan="2"><input type="radio" name="position" value="server" checked="checked" /> 备份到服务器</td> </tr> <tr> <td colspan="2">备份密码</td> </tr> <tr> <td colspan="2">只有输入正确密码才能进行备份 <input name="password" type="password" size="10" /> </td> </tr> </table></td></tr> <tr><td colspan="2" align='center'><input type="submit" name="act" value="备份"></td></tr> </table></form><?}$db_obj->sql_close();?>