当前位置:首页 > PHP教程 > php应用 > 列表

php mysql 数据库备份程序

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-11 20:31:21 浏览: 评论:0 

提供一款实例的php mysql 数据库备份程序,很好方法的可以对你的数据库进行在线实时备份,这样可以保存数据库的安全,并且他是以.sql文件保存在bakdata目录还日期生成的数据库备份文件的,代码如下:

  1. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  5. <link type="text/css" rel="stylesheet" href="common/control.css"
  6. <script type="text/javascript" language="javascript" src="common/admin.otable.js"></script> 
  7. <script type="text/javascript" language="javascript" src="common/include.func.js"></script> 
  8. <title>数据管理</title> 
  9. <style type="text/css"
  10. span {padding-left:8px;} 
  11. </style> 
  12. </head> 
  13. <body class="contentbody"
  14. <div class="maindiv"
  15. <span class="ctitle">esweb系统数据管理</span> 
  16. <ul class="cmenu"
  17.  <li><a href="sql_backup.php">数据备份</a></li> 
  18.     <li><a href="sql_restore.php">数据还原</a></li> 
  19.  <li><a href="sql_optimize.php">数据优化</a> 
  20. </ul> 
  21. <div class="concontent"
  22. <?php 
  23. /*--------------界面--------------*/if(!$_post['act']){/*----------------------*/ 
  24. $msgs[]="服务器备份目录为$backup"
  25. $msgs[]="对于较大的数据表,强烈建议使用分卷备份"
  26. $msgs[]="只有选择备份到服务器,才能使用分卷备份功能"
  27. //show_msg($msgs); 
  28. ?> 
  29. <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> 
  30. <form name="myform" method="post" action="sql_backup.php"
  31. <table cellpadding="" cellspacing="0" border="0" width="100%" class="ctable" id="otable" align="center"
  32. <tr> 
  33.  <th colspan="2">esweb系统数据备份</th> 
  34. </tr> 
  35. <tr> 
  36.  <td align="right" width="250">选择备份方式</td> 
  37.     <td><input type="radio" name="bfzl" value="quanbubiao" checked="checked" />备份全部数据  
  38.     <input type="radio" name="bfzl" value="danbiao" />备份单张表数据   
  39.     <select name="tablename"><option value="">请选择</option> 
  40.     <?php 
  41.     $d->query("show table status from $mysqldb"); 
  42.     while($d->nextrecord()){ 
  43.     echo "<option value='".$d->f('name')."'>".$d->f('name')."</option>";} 
  44.     ?> 
  45.     </select></td> 
  46. </tr> 
  47. <tr> 
  48.  <td align="right">选择目标位置</td> 
  49.     <td><input type="radio" name="weizhi" value="server" checked="checked" />备份到服务器  
  50.     <input type="radio" name="weizhi" value="localpc" />备份到本地</td> 
  51. </tr> 
  52. <tr> 
  53.  <td align="right">使用分卷备份</td> 
  54.     <td><input type="checkbox" name="fenjuan" value="yes" checked="checked" /> 
  55.     分卷备份 <input name="filesize" type="text" value="1260" size="10" class="text2" /> k <span>(只有选择备份到服务器,才能使用分卷备份功能)</span></td> 
  56. </tr> 
  57. <tr> 
  58.  <td align="right">程序说明</td> 
  59.     <td>1.对于较大的数据表,强烈建议使用分卷备份. 
  60.     <br>2.只有选择备份到服务器,才能使用分卷备份功能. 
  61.     </td> 
  62. </tr> 
  63. <tr> 
  64.  <td align="center" colspan="2"><input type="submit" id="act" name="act" value="备 份" class="button" /> <input type="reset" value="重 置" class="button" /></td> 
  65. </tr> 
  66. </table> 
  67. </form> 
  68. <?php /*-------------界面结束-------------*/}/*---------------------------------*/ 
  69. /*----*/else{/*--------------主程序-----------------------------------------*/ 
  70. if($_post['weizhi']=="localpc"&&$_post['fenjuan']=='yes'
  71. {$msgs[]="只有选择备份到服务器,才能使用分卷备份功能"
  72. show_msg($msgs); pageend();} 
  73. if($_post['fenjuan']=="yes"&&!$_post['filesize']) 
  74. {$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小"
  75. show_msg($msgs); pageend();} 
  76. if($_post['weizhi']=="server"&&!writeable($backup)) 
  77. {$msgs[]="备份文件存放目录'$backup'不可写,请修改目录属性"
  78. show_msg($msgs); pageend();} 
  79. /*----------备份全部表-------------*/if($_post['bfzl']=="quanbubiao"){/*----*/ 
  80. /*----不分卷*/if(!$_post['fenjuan']){/*--------------------------------*/ 
  81. if(!$tables=$d->query("show table status from $mysqldb")) 
  82. {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} 
  83. $sql=""
  84. while($d->nextrecord($tables)) 
  85. $table=$d->f("name"); 
  86. $sql.=make_header($table); 
  87. $d->query("select * from $table"); 
  88. $num_fields=$d->nf(); 
  89. while($d->nextrecord()) 
  90. {$sql.=make_record($table,$num_fields);} 
  91. $filename=date("ymd",time())."_all.sql"
  92. if($_post['weizhi']=="localpc") down_file($sql,$filename); 
  93. elseif($_post['weizhi']=="server"
  94. {if(write_file($sql,$filename)) 
  95. $msgs[]="全部数据表数据备份完成,生成备份文件'$backup/$filename'"
  96. else $msgs[]="备份全部数据表失败"
  97. show_msg($msgs); 
  98. pageend(); 
  99. /*-----------------不要卷结束*/}/*-----------------------*/ 
  100. /*-----------------分卷*/else{/*-------------------------*/ 
  101. if(!$_post['filesize']) 
  102. {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} 
  103. if(!$tables=$d->query("show table status from $mysqldb")) 
  104. {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} 
  105. $sql=""$p=1; 
  106. $filename=date("ymd",time())."_all"
  107. while($d->nextrecord($tables)) 
  108. $table=$d->f("name"); 
  109. $sql.=make_header($table); 
  110. $d->query("select * from $table"); 
  111. $num_fields=$d->nf(); 
  112. while($d->nextrecord()) 
  113. {$sql.=make_record($table,$num_fields); 
  114. if(strlen($sql)>=$_post['filesize']*1000){ 
  115.      $filename.=("_v".$p.".sql"); 
  116.      if(write_file($sql,$filename)) 
  117.      $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'"
  118.      else $msgs[]="备份表-".$_post['tablename']."-失败"
  119.      $p++; 
  120.      $filename=date("ymd",time())."_all"
  121.      $sql="";} 
  122. if($sql!=""){$filename.=("_v".$p.".sql");   
  123. if(write_file($sql,$filename)) 
  124. $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";} 
  125. show_msg($msgs); 
  126. /*---------------------分卷结束*/}/*--------------------------------------*/ 
  127. /*--------备份全部表结束*/}/*---------------------------------------------*/ 
  128. /*--------备份单表------*/elseif($_post['bfzl']=="danbiao"){/*------------*/ 
  129. if(!$_post['tablename']) 
  130. {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();} 
  131. /*--------不分卷*/if(!$_post['fenjuan']){/*-------------------------------*/ 
  132. $sql=make_header($_post['tablename']); 
  133. $d->query("select * from ".$_post['tablename']); 
  134. $num_fields=$d->nf(); 
  135. while($d->nextrecord()) 
  136. {$sql.=make_record($_post['tablename'],$num_fields);} 
  137. $filename=date("ymd",time())."_".$_post['tablename'].".sql"
  138. if($_post['weizhi']=="localpc") down_file($sql,$filename); 
  139. elseif($_post['weizhi']=="server"
  140. {if(write_file($sql,$filename)) 
  141. $msgs[]="表-".$_post['tablename']."-数据备份完成,生成备份文件'$backup/$filename'"
  142. else $msgs[]="备份表-".$_post['tablename']."-失败"
  143. show_msg($msgs); 
  144. pageend(); 
  145. /*----------------不要卷结束*/}/*------------------------------------*/ 
  146. /*----------------分卷*/else{/*--------------------------------------*/ 
  147. if(!$_post['filesize']) 
  148. {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} 
  149. $sql=make_header($_post['tablename']); $p=1;  
  150. $filename=date("ymd",time())."_".$_post['tablename']; 
  151. $d->query("select * from ".$_post['tablename']); 
  152. $num_fields=$d->nf(); 
  153. while ($d->nextrecord())  
  154. {  
  155.     $sql.=make_record($_post['tablename'],$num_fields); 
  156.       if(strlen($sql)>=$_post['filesize']*1000){ 
  157.      $filename.=("_v".$p.".sql"); 
  158.      if(write_file($sql,$filename)) 
  159.      $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'"
  160.      else $msgs[]="备份表-".$_post['tablename']."-失败"
  161.      $p++; 
  162.      $filename=date("ymd",time())."_".$_post['tablename']; 
  163.      $sql="";} 
  164. if($sql!=""){$filename.=("_v".$p.".sql");   
  165. if(write_file($sql,$filename)) 
  166. $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";} 
  167. show_msg($msgs); 
  168. /*----------分卷结束*/}/*--------------------------------------------------*/ 
  169. /*----------备份单表结束*/}/*----------------------------------------------*/ 
  170. /*---*/}/*-------------主程序结束------------------------------------------*/ 
  171. function write_file($sql,$filename
  172. $re=true; 
  173. global $backup
  174. if(!@$fp=fopen($backup."/".$filename,"w+")) {$re=false; echo "failed to open target file";} 
  175. if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";} 
  176. if(!@fclose($fp)) {$re=false; echo "failed to close target file";} 
  177. return $re
  178. function down_file($sql,$filename
  179. ob_end_clean(); 
  180. header("content-encoding: none"); 
  181. header("content-type: ".(strpos($_server['http_user_agent'], 'msie') ? 'application/octetstream' : 'application/octet-stream')); 
  182.     
  183. header("content-disposition: ".(strpos($_server['http_user_agent'], 'msie') ? 'inline; ' : 'attachment; ')."filename=".$filename); 
  184.     
  185. header("content-length: ".strlen($sql)); 
  186. header("pragma: no-cache"); 
  187.     
  188. header("expires: 0"); 
  189. echo $sql
  190. $e=ob_get_contents(); 
  191. ob_end_clean(); 
  192. function writeable($dir
  193. if(!is_dir($dir)) { 
  194. @mkdir($dir, 0777); 
  195. if(is_dir($dir))  
  196. if($fp = @fopen("$dir/test.test"'w')) 
  197.     { 
  198. @fclose($fp); 
  199. @unlink("$dir/test.test"); 
  200. $writeable = 1; 
  201. }  
  202. else { 
  203. $writeable = 0; 
  204. return $writeable
  205. function make_header($table
  206. {global $d
  207. $sql="drop table if exists ".$table." "
  208. $d->query("show create table ".$table); 
  209. $d->nextrecord(); 
  210. $tmp=preg_replace("/ /","",$d->f("create table")); 
  211. $sql.=$tmp." "
  212. return $sql
  213. function make_record($table,$num_fields
  214. {global $d
  215. $comma=""
  216. $sql .= "insert into ".$table." values("
  217. for($i = 0; $i < $num_fields$i++)  
  218. {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";} 
  219. $sql .= ") "
  220. return $sql
  221. function show_msg($msgs
  222. $title="提示:"
  223. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>"
  224. echo "<tr><td>".$title."</td></tr>"
  225. echo "<tr><td><br><ul>"
  226. while (list($k,$v)=each($msgs)) 
  227. echo "<li>".$v."</li>"
  228. echo "</ul></td></tr></table>"
  229. function pageend() 
  230. exit(); 
  231. ?> 
  232. </div><br /><br /> 
  233. </div> 
  234. </div> 
  235. </body> 
  236. </html> 
  237. class db{ 
  238. var $linkid
  239. var $sqlid
  240. var $record
  241. function db($host="",$username="",$password="",$database=""
  242. if(!$this->linkid)    @$this->linkid = mysql_connect($host$username$passwordor die("连接服务器失败."); 
  243. @mysql_select_db($database,$this->linkid) or die("无法打开数据库"); 
  244. return $this->linkid;} 
  245. function query($sql
  246. {if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid; 
  247. else { 
  248.     $this->err_report($sql,mysql_error); 
  249. return false;} 
  250. function nr($sql_id=""
  251. {if(!$sql_id$sql_id=$this->sqlid; 
  252. return mysql_num_rows($sql_id);} 
  253. function nf($sql_id=""
  254. {if(!$sql_id$sql_id=$this->sqlid; 
  255. return mysql_num_fields($sql_id);} 
  256. function nextrecord($sql_id=""
  257. {if(!$sql_id$sql_id=$this->sqlid; 
  258. if($this->record=mysql_fetch_array($sql_id))    return $this->record; 
  259. else return false; 
  260. function f($name
  261. if($this->record[$name]) return $this->record[$name]; 
  262. else return false; 
  263. function close() {mysql_close($this->linkid);} 
  264. function lock($tblname,$op="write"
  265. {if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;} 
  266. function unlock() 
  267. {if(mysql_query("unlock tables")) return true; else return false;} 
  268. function ar() { 
  269.       return @mysql_affected_rows($this->linkid); 
  270.     } 
  271. function i_id() { 
  272.     return mysql_insert_id(); 
  273. function err_report($sql,$err
  274. echo "mysql查询错误<br>"
  275. echo "查询语句:".$sql."<br>"
  276. echo "错误信息:".$err
  277. }//开源代码phpfensi.com 
  278. /****************************************类结束***************************/ 
  279.  
  280. global $mysqlhost$mysqluser$mysqlpwd$mysqldb$backup
  281. $mysqlhost = $mydbhost;          //host name 
  282. $mysqluser = $mydbuser;          //login name 
  283. $mysqlpwd = $mydbpw;             //password 
  284. $mysqldb = $mydbname;            //name of database 
  285. $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb); 
  286. $d->query("set names 'utf8'");

Tags: php mysql 数据库备份

分享到: