php mysql 数据库备份程序 |
时间:2015-01-23 来源:西部数据 作者:西部数据 |
|
提供一款实例的php mysql 数据库备份程序,很好方法的可以对你的数据库进行在线实时备份,这样可以保存数据库的安全,并且他是以.sql文件保存在bakdata目录还日期生成的数据库备份文件的,代码如下:
- <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link type="text/css" rel="stylesheet" href="common/control.css">
- <script type="text/javascript" language="javascript" src="common/admin.otable.js"></script>
- <script type="text/javascript" language="javascript" src="common/include.func.js"></script>
- <title>数据管理</title>
- <style type="text/css">
- span {padding-left:8px;}
- </style>
- </head>
- <body class="contentbody">
- <div class="maindiv">
- <span class="ctitle">esweb系统数据管理</span>
- <ul class="cmenu">
- <li><a href="sql_backup.php">数据备份</a></li>
- <li><a href="sql_restore.php">数据还原</a></li>
- <li><a href="sql_optimize.php">数据优化</a>
- </ul>
- <div class="concontent">
- <?php
- if(!$_post['act']){
- $msgs[]="服务器备份目录为$backup";
- $msgs[]="对于较大的数据表,强烈建议使用分卷备份";
- $msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
-
- ?>
- <div class="thead"><span class="left"><img src="images/icon2/into.gif" align="absmiddle" /> 如果需要备份、还原或者优化<font color="red"> 大量的数据 </font>, 推荐使用"<a href="http:
- <form name="myform" method="post" action="sql_backup.php">
- <table cellpadding="" cellspacing="0" border="0" width="100%" class="ctable" id="otable" align="center">
- <tr>
- <th colspan="2">esweb系统数据备份</th>
- </tr>
- <tr>
- <td align="right" width="250">选择备份方式</td>
- <td><input type="radio" name="bfzl" value="quanbubiao" checked="checked" />备份全部数据
- <input type="radio" name="bfzl" value="danbiao" />备份单张表数据
- <select name="tablename"><option value="">请选择</option>
- <?php
- $d->query("show table status from $mysqldb");
- while($d->nextrecord()){
- echo "<option value='".$d->f('name')."'>".$d->f('name')."</option>";}
- ?>
- </select></td>
- </tr>
- <tr>
- <td align="right">选择目标位置</td>
- <td><input type="radio" name="weizhi" value="server" checked="checked" />备份到服务器
- <input type="radio" name="weizhi" value="localpc" />备份到本地</td>
- </tr>
- <tr>
- <td align="right">使用分卷备份</td>
- <td><input type="checkbox" name="fenjuan" value="yes" checked="checked" />
- 分卷备份 <input name="filesize" type="text" value="1260" size="10" class="text2" /> k <span>(只有选择备份到服务器,才能使用分卷备份功能)</span></td>
- </tr>
- <tr>
- <td align="right">程序说明</td>
- <td>1.对于较大的数据表,强烈建议使用分卷备份.
- <br>2.只有选择备份到服务器,才能使用分卷备份功能.
- </td>
- </tr>
- <tr>
- <td align="center" colspan="2"><input type="submit" id="act" name="act" value="备 份" class="button" /> <input type="reset" value="重 置" class="button" /></td>
- </tr>
- </table>
- </form>
- <?php }
- else{
- if($_post['weizhi']=="localpc"&&$_post['fenjuan']=='yes')
- {$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
- show_msg($msgs); pageend();}
- if($_post['fenjuan']=="yes"&&!$_post['filesize'])
- {$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小";
- show_msg($msgs); pageend();}
- if($_post['weizhi']=="server"&&!writeable($backup))
- {$msgs[]="备份文件存放目录'$backup'不可写,请修改目录属性";
- show_msg($msgs); pageend();}
- if($_post['bfzl']=="quanbubiao"){
- if(!$_post['fenjuan']){
- if(!$tables=$d->query("show table status from $mysqldb"))
- {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
- $sql="";
- while($d->nextrecord($tables))
- {
- $table=$d->f("name");
- $sql.=make_header($table);
- $d->query("select * from $table");
- $num_fields=$d->nf();
- while($d->nextrecord())
- {$sql.=make_record($table,$num_fields);}
- }
- $filename=date("ymd",time())."_all.sql";
- if($_post['weizhi']=="localpc") down_file($sql,$filename);
- elseif($_post['weizhi']=="server")
- {if(write_file($sql,$filename))
- $msgs[]="全部数据表数据备份完成,生成备份文件'$backup/$filename'";
- else $msgs[]="备份全部数据表失败";
- show_msg($msgs);
- pageend();
- }
- }
- else{
- if(!$_post['filesize'])
- {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
- if(!$tables=$d->query("show table status from $mysqldb"))
- {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
- $sql=""; $p=1;
- $filename=date("ymd",time())."_all";
- while($d->nextrecord($tables))
- {
- $table=$d->f("name");
- $sql.=make_header($table);
- $d->query("select * from $table");
- $num_fields=$d->nf();
- while($d->nextrecord())
- {$sql.=make_record($table,$num_fields);
- if(strlen($sql)>=$_post['filesize']*1000){
- $filename.=("_v".$p.".sql");
- if(write_file($sql,$filename))
- $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";
- else $msgs[]="备份表-".$_post['tablename']."-失败";
- $p++;
- $filename=date("ymd",time())."_all";
- $sql="";}
- }
- }
- if($sql!=""){$filename.=("_v".$p.".sql");
- if(write_file($sql,$filename))
- $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";}
- show_msg($msgs);
- }
- }
- elseif($_post['bfzl']=="danbiao"){
- if(!$_post['tablename'])
- {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();}
- if(!$_post['fenjuan']){
- $sql=make_header($_post['tablename']);
- $d->query("select * from ".$_post['tablename']);
- $num_fields=$d->nf();
- while($d->nextrecord())
- {$sql.=make_record($_post['tablename'],$num_fields);}
- $filename=date("ymd",time())."_".$_post['tablename'].".sql";
- if($_post['weizhi']=="localpc") down_file($sql,$filename);
- elseif($_post['weizhi']=="server")
- {if(write_file($sql,$filename))
- $msgs[]="表-".$_post['tablename']."-数据备份完成,生成备份文件'$backup/$filename'";
- else $msgs[]="备份表-".$_post['tablename']."-失败";
- show_msg($msgs);
- pageend();
- }
- }
- else{
- if(!$_post['filesize'])
- {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
- $sql=make_header($_post['tablename']); $p=1;
- $filename=date("ymd",time())."_".$_post['tablename'];
- $d->query("select * from ".$_post['tablename']);
- $num_fields=$d->nf();
- while ($d->nextrecord())
- {
- $sql.=make_record($_post['tablename'],$num_fields);
- if(strlen($sql)>=$_post['filesize']*1000){
- $filename.=("_v".$p.".sql");
- if(write_file($sql,$filename))
- $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";
- else $msgs[]="备份表-".$_post['tablename']."-失败";
- $p++;
- $filename=date("ymd",time())."_".$_post['tablename'];
- $sql="";}
- }
- if($sql!=""){$filename.=("_v".$p.".sql");
- if(write_file($sql,$filename))
- $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";}
- show_msg($msgs);
- }
- }
- }
- function write_file($sql,$filename)
- {
- $re=true;
- global $backup;
- if(!@$fp=fopen($backup."/".$filename,"w+")) {$re=false; echo "failed to open target file";}
- if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}
- if(!@fclose($fp)) {$re=false; echo "failed to close target file";}
- return $re;
- }
- function down_file($sql,$filename)
- {
- ob_end_clean();
- header("content-encoding: none");
- header("content-type: ".(strpos($_server['http_user_agent'], 'msie') ? 'application/octetstream' : 'application/octet-stream'));
-
- header("content-disposition: ".(strpos($_server['http_user_agent'], 'msie') ? 'inline; ' : 'attachment; ')."filename=".$filename);
-
- header("content-length: ".strlen($sql));
- header("pragma: no-cache");
-
- header("expires: 0");
- echo $sql;
- $e=ob_get_contents();
- ob_end_clean();
- }
- function writeable($dir)
- {
- if(!is_dir($dir)) {
- @mkdir($dir, 0777);
- }
- if(is_dir($dir))
- {
- if($fp = @fopen("$dir/test.test", 'w'))
- {
- @fclose($fp);
- @unlink("$dir/test.test");
- $writeable = 1;
- }
- else {
- $writeable = 0;
- }
- }
- return $writeable;
- }
- function make_header($table)
- {global $d;
- $sql="drop table if exists ".$table." ";
- $d->query("show create table ".$table);
- $d->nextrecord();
- $tmp=preg_replace("/ /","",$d->f("create table"));
- $sql.=$tmp." ";
- return $sql;
- }
- function make_record($table,$num_fields)
- {global $d;
- $comma="";
- $sql .= "insert into ".$table." values(";
- for($i = 0; $i < $num_fields; $i++)
- {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";}
- $sql .= ") ";
- return $sql;
- }
- function show_msg($msgs)
- {
- $title="提示:";
- echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
- echo "<tr><td>".$title."</td></tr>";
- echo "<tr><td><br><ul>";
- while (list($k,$v)=each($msgs))
- {
- echo "<li>".$v."</li>";
- }
- echo "</ul></td></tr></table>";
- }
- function pageend()
- {
- exit();
- }
- ?>
- </div><br /><br />
- </div>
- </div>
- </body>
- </html>
- class db{
- var $linkid;
- var $sqlid;
- var $record;
- function db($host="",$username="",$password="",$database="")
- {
- if(!$this->linkid) @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败.");
- @mysql_select_db($database,$this->linkid) or die("无法打开数据库");
- return $this->linkid;}
- function query($sql)
- {if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid;
- else {
- $this->err_report($sql,mysql_error);
- return false;}
- }
- function nr($sql_id="")
- {if(!$sql_id) $sql_id=$this->sqlid;
- return mysql_num_rows($sql_id);}
- function nf($sql_id="")
- {if(!$sql_id) $sql_id=$this->sqlid;
- return mysql_num_fields($sql_id);}
- function nextrecord($sql_id="")
- {if(!$sql_id) $sql_id=$this->sqlid;
- if($this->record=mysql_fetch_array($sql_id)) return $this->record;
- else return false;
- }
- function f($name)
- {
- if($this->record[$name]) return $this->record[$name];
- else return false;
- }
- function close() {mysql_close($this->linkid);}
- function lock($tblname,$op="write")
- {if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;}
- function unlock()
- {if(mysql_query("unlock tables")) return true; else return false;}
- function ar() {
- return @mysql_affected_rows($this->linkid);
- }
- function i_id() {
- return mysql_insert_id();
- }
- function err_report($sql,$err)
- {
- echo "mysql查询错误<br>";
- echo "查询语句:".$sql."<br>";
- echo "错误信息:".$err;
- }
-
-
- global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb, $backup;
- $mysqlhost = $mydbhost;
- $mysqluser = $mydbuser;
- $mysqlpwd = $mydbpw;
- $mysqldb = $mydbname;
- $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);
- $d->query("set names 'utf8'");
|
|
|
|