php mysql 數據庫備份程序 /* 提供一款實例的php mysql 數據庫備份程序,很好方法的可以對你的數據庫進行在線實時備份,這樣可以保存數據庫的安全,並且他是以.sql文件保存在bakdata目錄還日期生成的數據庫備份文件的。
php教程 mysql教程 數據庫教程備份程序
/*
提供一款實例的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/網頁特效" 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[]="只有選擇備份到服務器,才能使用分卷備份功能";
//show_msg($msgs);
?>
<div class="thead"><span class="left"><img src="images/icon2/into.gif" align="absmiddle" /> 如果需要備份、還原或者優化<font color="red"> 大量的數據 </font>, 推薦使用"<a href="http://www.phome.net/ebak2010/" target="_blank">帝國備份王2010</a>"</span> <span class="right"></span></div>
<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."n";
$d->query("show create table ".$table);
$d->nextrecord();
$tmp=preg_replace("/n/","",$d->f("create table"));
$sql.=$tmp."n";
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 .= ")n";
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; //host name
$mysqluser = $mydbuser; //login name
$mysqlpwd = $mydbpw; //password
$mysqldb = $mydbname; //name of database$d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);
$d->query("set names 'utf8'");