首页 > 开发 > PHP > 正文

php mysql 数据库备份程序

2024-05-04 21:59:05
字体:大 中 小
来源:转载
供稿:网友

提供一款实例的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. { 
  86. $table=$d->f("name"); 
  87. $sql.=make_header($table); 
  88. $d->query("select * from $table"); 
  89. $num_fields=$d->nf(); 
  90. while($d->nextrecord()) 
  91. {$sql.=make_record($table,$num_fields);} 
  92. } 
  93. $filename=date("ymd",time())."_all.sql"; 
  94. if($_post['weizhi']=="localpc") down_file($sql,$filename); 
  95. elseif($_post['weizhi']=="server") 
  96. {if(write_file($sql,$filename)) 
  97. $msgs[]="全部数据表数据备份完成,生成备份文件'$backup/$filename'"; 
  98. else $msgs[]="备份全部数据表失败"; 
  99. show_msg($msgs); 
  100. pageend(); 
  101. } 
  102. /*-----------------不要卷结束*/}/*-----------------------*/ 
  103. /*-----------------分卷*/else{/*-------------------------*/ 
  104. if(!$_post['filesize']) 
  105. {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} 
  106. if(!$tables=$d->query("show table status from $mysqldb")) 
  107. {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} 
  108. $sql=""; $p=1; 
  109. $filename=date("ymd",time())."_all"; 
  110. while($d->nextrecord($tables)) 
  111. { 
  112. $table=$d->f("name"); 
  113. $sql.=make_header($table); 
  114. $d->query("select * from $table"); 
  115. $num_fields=$d->nf(); 
  116. while($d->nextrecord()) 
  117. {$sql.=make_record($table,$num_fields); 
  118. if(strlen($sql)>=$_post['filesize']*1000){ 
  119.      $filename.=("_v".$p.".sql"); 
  120.      if(write_file($sql,$filename)) 
  121.      $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'"; 
  122.      else $msgs[]="备份表-".$_post['tablename']."-失败"; 
  123.      $p++; 
  124.      $filename=date("ymd",time())."_all"; 
  125.      $sql="";} 
  126. } 
  127. } 
  128. if($sql!=""){$filename.=("_v".$p.".sql");   
  129. if(write_file($sql,$filename)) 
  130. $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";} 
  131. show_msg($msgs); 
  132. /*---------------------分卷结束*/}/*--------------------------------------*/ 
  133. /*--------备份全部表结束*/}/*---------------------------------------------*/ 
  134. /*--------备份单表------*/elseif($_post['bfzl']=="danbiao"){/*------------*/ 
  135. if(!$_post['tablename']) 
  136. {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();} 
  137. /*--------不分卷*/if(!$_post['fenjuan']){/*-------------------------------*/ 
  138. $sql=make_header($_post['tablename']); 
  139. $d->query("select * from ".$_post['tablename']); 
  140. $num_fields=$d->nf(); 
  141. while($d->nextrecord()) 
  142. {$sql.=make_record($_post['tablename'],$num_fields);} 
  143. $filename=date("ymd",time())."_".$_post['tablename'].".sql"; 
  144. if($_post['weizhi']=="localpc") down_file($sql,$filename); 
  145. elseif($_post['weizhi']=="server") 
  146. {if(write_file($sql,$filename)) 
  147. $msgs[]="表-".$_post['tablename']."-数据备份完成,生成备份文件'$backup/$filename'"; 
  148. else $msgs[]="备份表-".$_post['tablename']."-失败"; 
  149. show_msg($msgs); 
  150. pageend(); 
  151. } 
  152. /*----------------不要卷结束*/}/*------------------------------------*/ 
  153. /*----------------分卷*/else{/*--------------------------------------*/ 
  154. if(!$_post['filesize']) 
  155. {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} 
  156. $sql=make_header($_post['tablename']); $p=1;  
  157. $filename=date("ymd",time())."_".$_post['tablename']; 
  158. $d->query("select * from ".$_post['tablename']); 
  159. $num_fields=$d->nf(); 
  160. while ($d->nextrecord())  
  161. {  
  162.     $sql.=make_record($_post['tablename'],$num_fields); 
  163.       if(strlen($sql)>=$_post['filesize']*1000){ 
  164.      $filename.=("_v".$p.".sql"); 
  165.      if(write_file($sql,$filename)) 
  166.      $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'"; 
  167.      else $msgs[]="备份表-".$_post['tablename']."-失败"; 
  168.      $p++; 
  169.      $filename=date("ymd",time())."_".$_post['tablename']; 
  170.      $sql="";} 
  171. } 
  172. if($sql!=""){$filename.=("_v".$p.".sql");   
  173. if(write_file($sql,$filename)) 
  174. $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";} 
  175. show_msg($msgs); 
  176. /*----------分卷结束*/}/*--------------------------------------------------*/ 
  177. /*----------备份单表结束*/}/*----------------------------------------------*/ 
  178. /*---*/}/*-------------主程序结束------------------------------------------*/ 
  179. function write_file($sql,$filename) 
  180. { 
  181. $re=true; 
  182. global $backup; 
  183. if(!@$fp=fopen($backup."/".$filename,"w+")) {$re=false; echo "failed to open target file";} 
  184. if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";} 
  185. if(!@fclose($fp)) {$re=false; echo "failed to close target file";} 
  186. return $re; 
  187. } 
  188. function down_file($sql,$filename) 
  189. { 
  190. ob_end_clean(); 
  191. header("content-encoding: none"); 
  192. header("content-type: ".(strpos($_server['http_user_agent'], 'msie') ? 'application/octetstream' : 'application/octet-stream')); 
  193.     
  194. header("content-disposition: ".(strpos($_server['http_user_agent'], 'msie') ? 'inline; ' : 'attachment; ')."filename=".$filename); 
  195.     
  196. header("content-length: ".strlen($sql)); 
  197. header("pragma: no-cache"); 
  198.     
  199. header("expires: 0"); 
  200. echo $sql; 
  201. $e=ob_get_contents(); 
  202. ob_end_clean(); 
  203. } 
  204. function writeable($dir) 
  205. { 
  206. if(!is_dir($dir)) { 
  207. @mkdir($dir, 0777); 
  208. } 
  209. if(is_dir($dir))  
  210. { 
  211. if($fp = @fopen("$dir/test.test", 'w')) 
  212.     { 
  213. @fclose($fp); 
  214. @unlink("$dir/test.test"); 
  215. $writeable = 1; 
  216. }  
  217. else { 
  218. $writeable = 0; 
  219. } 
  220. } 
  221. return $writeable; 
  222. } 
  223. function make_header($table) 
  224. {global $d; 
  225. $sql="drop table if exists ".$table." "; 
  226. $d->query("show create table ".$table); 
  227. $d->nextrecord(); 
  228. $tmp=preg_replace("/ /","",$d->f("create table")); 
  229. $sql.=$tmp." "; 
  230. return $sql; 
  231. } 
  232. function make_record($table,$num_fields) 
  233. {global $d; 
  234. $comma=""; 
  235. $sql .= "insert into ".$table." values("; 
  236. for($i = 0; $i < $num_fields; $i++)  
  237. {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";} 
  238. $sql .= ") "; 
  239. return $sql; 
  240. } 
  241. function show_msg($msgs) 
  242. { 
  243. $title="提示:"; 
  244. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>"; 
  245. echo "<tr><td>".$title."</td></tr>"; 
  246. echo "<tr><td><br><ul>"; 
  247. while (list($k,$v)=each($msgs)) 
  248. { 
  249. echo "<li>".$v."</li>"; 
  250. } 
  251. echo "</ul></td></tr></table>"; 
  252. } 
  253. function pageend() 
  254. { 
  255. exit(); 
  256. } 
  257. ?> 
  258. </div><br /><br /> 
  259. </div> 
  260. </div> 
  261. </body> 
  262. </html> 
  263. class db{ 
  264. var $linkid; 
  265. var $sqlid; 
  266. var $record; 
  267. function db($host="",$username="",$password="",$database="") 
  268. { 
  269. if(!$this->linkid)    @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败."); 
  270. @mysql_select_db($database,$this->linkid) or die("无法打开数据库"); 
  271. return $this->linkid;} 
  272. function query($sql) 
  273. {if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid; 
  274. else { 
  275.     $this->err_report($sql,mysql_error); 
  276. return false;} 
  277. } 
  278. function nr($sql_id="") 
  279. {if(!$sql_id) $sql_id=$this->sqlid; 
  280. return mysql_num_rows($sql_id);} 
  281. function nf($sql_id="") 
  282. {if(!$sql_id) $sql_id=$this->sqlid; 
  283. return mysql_num_fields($sql_id);} 
  284. function nextrecord($sql_id="") 
  285. {if(!$sql_id) $sql_id=$this->sqlid; 
  286. if($this->record=mysql_fetch_array($sql_id))    return $this->record; 
  287. else return false; 
  288. } 
  289. function f($name) 
  290. { 
  291. if($this->record[$name]) return $this->record[$name]; 
  292. else return false; 
  293. } 
  294. function close() {mysql_close($this->linkid);} 
  295. function lock($tblname,$op="write") 
  296. {if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;} 
  297. function unlock() 
  298. {if(mysql_query("unlock tables")) return true; else return false;} 
  299. function ar() { 
  300.       return @mysql_affected_rows($this->linkid); 
  301.     } 
  302. function i_id() { 
  303.     return mysql_insert_id(); 
  304. } 
  305. function err_report($sql,$err) 
  306. { 
  307. echo "mysql查询错误<br>"; 
  308. echo "查询语句:".$sql."<br>"; 
  309. echo "错误信息:".$err; 
  310. }//开源代码Vevb.com 
  311. /****************************************类结束***************************/ 
  312.  
  313. global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb, $backup; 
  314. $mysqlhost = $mydbhost;          //host name 
  315. $mysqluser = $mydbuser;          //login name 
  316. $mysqlpwd = $mydbpw;             //password 
  317. $mysqldb = $mydbname;            //name of database 
  318. $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb); 
  319. $d->query("set names 'utf8'");

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表