php备份mysql数据库程序代码

小潘seo 重庆小潘seo博客和你一起学习SEO知识,共同分享SEO优化~

在我们开发中数据库备份是很重要的环节,下面我们来分享两个php备份mysql数据库类,有需要的朋友可稍加修改即可使用.

先看备份的类文件backdata.class.php,代码如下:

  1. <?php
  2. /*
  3. *
  4. *简单的一个Mysql备份数据类
  5. *
  6. */
  7. classbackupData{
  8. private$mysql_link;//链接标识
  9. private$dbName;//数据库名
  10. private$dataDir;//数据所要存放的目录
  11. private$tableNames;//表名
  12. publicfunction__construct($mysql_link){
  13. $this->mysql_link=$mysql_link;
  14. }
  15. publicfunctionbackupTables($dbName,$dataDir,$tableNames){//开始备份
  16. $this->dbName=$dbName;
  17. $this->dataDir=$dataDir;
  18. $this->tableNames=$tableNames;
  19. $tables=$this->delarray($this->tableNames);
  20. $sqls='';
  21. foreach($tablesas$tablename){
  22. if($tablename==''){//表不存在时
  23. continue;
  24. }
  25. //************************以下是形成SQL的前半部分**************
  26. //如果存在表,就先删除
  27. $sqls.="DROPTABLEIFEXISTS$tablename;n";
  28. //读取表结构
  29. $rs=mysql_query("SHOWCREATETABLE$tablename",$this->mysql_link);
  30. $row=mysql_fetch_row($rs);
  31. //获得表结构组成SQL
  32. $sqls.=$row['1'].";nn";
  33. unset($rs);
  34. unset($row);
  35. //************************以下是形成SQL的后半部分**************
  36. //查寻出表中的所有数据
  37. $rs=mysql_query("select*from$tablename",$this->mysql_link);
  38. //表的字段个数
  39. $field=mysql_num_fields($rs);
  40. //形成此种SQL语句:"INSERTINTO`groups`VALUES('1499e0ca25988d','主任','','0');"
  41. while($rows=mysql_fetch_row($rs)){
  42. $comma='';//逗号
  43. $sqls.="INSERTINTO`$tablename`VALUES(";
  44. for($i=0;$i<$field;$i++){
  45. $sqls.=$comma."'".$rows[$i]."'";
  46. $comma=',';
  47. }
  48. $sqls.=");nnn";
  49. }
  50. }
  51. $backfilepath=$this->dataDir.date("Ymdhis",time()).'.sql';
  52. //写入文件
  53. $filehandle=fopen($backfilepath,"w");
  54. fwrite($filehandle,$sqls);
  55. fclose($filehandle);
  56. }
  57. privatefunctiondelarray($array){//处理传入进来的数组
  58. foreach($arrayas$tables){
  59. if($tables=='*'){//所有的表(获得表名时不能按常规方式来组成一个数组)
  60. $newtables=mysql_list_tables($this->dbName,$this->mysql_link);
  61. $tableList=array();
  62. for($i=0;$i<mysql_numrows($newtables);$i++){
  63. array_push($tableList,mysql_tablename($newtables,$i));
  64. }
  65. $tableList=$tableList;
  66. }else{
  67. $tableList=$array;
  68. break;
  69. }
  70. }
  71. return$tableList;
  72. }
  73. }
  74. ?>

数据库备份用法,代码如下:

  1. require_once("backdata.class.php");
  2. $link=@mysql_connect("localhost","数据库名","密码")ordie('Couldnotconnecttoserver.');
  3. mysql_query("usecms",$link);
  4. mysql_query("setnamesutf8",$link);
  5. $dbbck=newbackupData($link);//实例化它,只要一个链接标识就行了
  6. //备份数据时,如想备份一个数据库中的所有表,你可这样写:
  7. $dbbck->backupTables("cms","./",array('*'));
  8. //备份数据时,如想备份一个数据库中的仅一个表时,你可这样写:
  9. $dbbck->backupTables("cms","./",array('user'));
  10. //备份数据时,如想备份一个数据库中的多个表时,你可这样写:
  11. $dbbck->backupTables("cms","./",array('user','acl','informatoin'));
  12. //注解:$dbbck->backupTables("参1","参2",array());中,

参1为:数据库名.

参2为:要存放备份数据的位置,即目录地址.

第三个为:你要保存那些表.

再来分享一个数据库备份类,代码如下:

  1. /**
  2. *说明,该类适用于小型的网站的数据库备份,内置mysql连接,只需要简单配置数据连接
  3. *及存贮备份的位置即可。
  4. *类实列化并且连接数据库以后可执行以下操作
  5. *get_db_table($database)取得所有数据表
  6. *export_sql($table,$subsection=0))生成sql文件,注意生成sql文件只保存到服务器目录,不提供下载
  7. *import_sql($dir)恢复数据只导入服务器目录下的sql文件
  8. *该类制作简单,可任意传播,如何您对该类有什么提议,请发送邮件给小虾
  9. *@author赵红健[游天小虾]
  10. *email:328742379@qq.com
  11. *qq交流群:69574955聚义堂-网页制作交
  12. */
  13. classdata{
  14. public$data_dir="class/";//备份文件存放的路径
  15. public$transfer="";//临时存放sql[切勿不要对该属性赋值,否则会生成错误的sql语句]
  16. /**
  17. *数据库连接
  18. *@paramstring$host数据库主机名
  19. *@paramstring$user用户名
  20. *@paramstring$pwd密码
  21. *@paramstring$db选择数据库名
  22. *@paramstring$charset编码方式
  23. */
  24. functionconnect_db($host,$user,$pwd,$db,$charset='gbk'){
  25. if(!$conn=mysql_connect($host,$user,$pwd)){
  26. returnfalse;
  27. }
  28. mysql_select_db($db);
  29. mysql_query("setnames$charset");
  30. returntrue;
  31. }
  32. /**
  33. *生成sql语句
  34. *@param$table要备份的表
  35. *@return$tabledump生成的sql语句
  36. */
  37. publicfunctionset_sql($table,$subsection=0,&$tabledom=''){
  38. $tabledom.="droptableifexists$tablen";
  39. $createtable=mysql_query("showcreatetable$table");
  40. $create=mysql_fetch_row($createtable);
  41. $create[1]=str_replace("n","",$create[1]);
  42. $create[1]=str_replace("t","",$create[1]);
  43. $tabledom.=$create[1].";n";
  44. $rows=mysql_query("select*from$table");
  45. $numfields=mysql_num_fields($rows);
  46. $numrows=mysql_num_rows($rows);
  47. $n=1;
  48. $sqlarry=array();
  49. while($row=mysql_fetch_row($rows)){
  50. $comma="";
  51. $tabledom.="insertinto$tablevalues(";
  52. for($i=0;$i<$numfields;$i++)
  53. {
  54. $tabledom.=$comma."'".mysql_escape_string($row[$i])."'";
  55. $comma=",";
  56. }
  57. $tabledom.=")n";
  58. if($subsection!=0&&strlen($this->transfer)>=$subsection*1000){
  59. $sqlarry[$n]=$tabledom;
  60. $tabledom='';$n++;
  61. }
  62. }
  63. return$sqlarry;
  64. }
  65. /**
  66. *列表数据库中的表
  67. *@paramdatabase$database要操作的数据库名
  68. *@returnarray$dbarray所列表的数据库表
  69. */
  70. publicfunctionget_db_table($database){
  71. $result=mysql_list_tables($database);
  72. while($tmparry=mysql_fetch_row($result)){
  73. $dbarry[]=$tmparry[0];
  74. }
  75. return$dbarry;
  76. }
  77. /**
  78. *验证目录是否有效
  79. *@paramdiretory$dir
  80. *@returnbooln
  81. */
  82. functioncheck_write_dir($dir){
  83. if(!is_dir($dir)){@mkdir($dir,0777);}
  84. if(is_dir($dir)){
  85. if($link=opendir($dir)){
  86. $filearry=scandir($dir);
  87. for($i=0;$i<count($filearry);$i++){
  88. if($filearry[$i]!='.'||$filearry!='..'){
  89. @unlink($dir.$filearry[$i]);
  90. }
  91. }
  92. }
  93. }
  94. returntrue;
  95. }
  96. /**
  97. *将数据写入到文件中
  98. *@paramfile$filename文件名
  99. *@paramstring$str要写入的信息
  100. *@returnbooln写入成功则返回true,否则false
  101. */
  102. privatefunctionwrite_sql($filename,$str){
  103. $re=true;
  104. if(!@$fp=fopen($filename,"w+")){$re=false;echo"在打开文件时遇到错误,备份失败!";}
  105. if(!@fwrite($fp,$str)){$re=false;echo"在写入信息时遇到错误,备份失败!";}
  106. if(!@fclose($fp)){$re=false;echo"在关闭文件时遇到错误,备份失败!";}
  107. return$re;
  108. }
  109. /**
  110. *生成sql文件
  111. *@paramstring$sqlsql语句
  112. *@paramnumber$subsection分卷大小,以kb为单位,为0表示不分卷
  113. */
  114. publicfunctionexport_sql($table,$subsection=0){
  115. if(!$this->check_write_dir($this->data_dir)){echo'您没有权限操作目录,备份失败';returnfalse;}
  116. if($subsection==0){
  117. if(!is_array($table)){
  118. $this->set_sql($table,0,$this->transfer);
  119. }else{
  120. for($i=0;$i<count($table);$i++){
  121. $this->set_sql($table[$i],0,$this->transfer);
  122. }
  123. }
  124. $filename=$this->data_dir.date("ymd",time()).'_all.sql';
  125. if(!$this->write_sql($filename,$this->transfer)){returnfalse;}
  126. }else{
  127. if(!is_array($table)){
  128. $sqlarry=$this->set_sql($table,$subsection,$this->transfer);
  129. $sqlarry[]=$this->transfer;
  130. }else{
  131. $sqlarry=array();
  132. for($i=0;$i<count($table);$i++){
  133. $tmparry=$this->set_sql($table[$i],$subsection,$this->transfer);
  134. $sqlarry=array_merge($sqlarry,$tmparry);
  135. }
  136. $sqlarry[]=$this->transfer;
  137. }
  138. for($i=0;$i<count($sqlarry);$i++){
  139. $filename=$this->data_dir.date("ymd",time()).'_part'.$i.'.sql';
  140. if(!$this->write_sql($filename,$sqlarry[$i])){returnfalse;}
  141. }
  142. }
  143. returntrue;
  144. }
  145. /**
  146. *载入sql文件
  147. *@paramdiretory$dir
  148. *@returnbooln
  149. *注意:请不在目录下面存放其它文件,或者目录
  150. *以节省恢复时间
  151. */
  152. publicfunctionimport_sql($dir){
  153. if($link=opendir($dir)){
  154. $filearry=scandir($dir);
  155. $pattern="_part[0-9]+.sql$|_all.sql$";
  156. for($i=0;$i<count($filearry);$i++){
  157. if(eregi($pattern,$filearry[$i])){
  158. $sqls=file($dir.$filearry[$i]);
  159. foreach($sqlsas$sql){
  160. str_replace("r","",$sql);
  161. str_replace("n","",$sql);
  162. if(!mysql_query(trim($sql)))returnfalse;
  163. }//phpfensi.com
  164. }
  165. }
  166. returntrue;
  167. }
  168. }
  169. }

应用方法,代码如下:

  1. //$d=newdata();
  2. //连接数据库
  3. //if(!$d->connect_db('localhost','root','','guestbook','gbk')){
  4. //echo'数据库连接失败';
  5. //}
  6. //查找数据库内所有数据表
  7. //$tablearry=$d->get_db_table('guestbook');
  8. //备份并生成sql文件
  9. //if(!$d->export_sql($tablearry)){
  10. //echo'备份失败';
  11. //}else{
  12. //echo'备份成功';
  13. //}
  14. //恢复导入sql文件夹
  15. //if($d->import_sql($d->data_dir)){
  16. //echo'恢复成功';
  17. //}else{
  18. //echo'恢复失败';
  19. //}

相关广告
  • php备份mysql数据库程序代码 php备份mysql数据库程序代码 php备份mysql数据库程序代码
相关阅读

php备份mysql数据库程序代码

2019/10/10 17:34:21 | 谷歌SEO算法 | 发外链