php教程|php手册
mysql
php教程-php手册
PHP数据库备份与恢复,PHP数据库备份恢复
代理ip采集网页源码,ubuntu 18建目录,Tomcat运行速度很慢,java爬虫 table,房产网站源码 php,淘宝seo定位lzw
先说下关于数据库备份与恢复的原理:
工艺品 源源码,vscode怎么在离线运行,ubuntu 配置lua,tomcat默认欢迎页,改装爬虫箱,thrift 生成php,蔡甸seo优化收费标准,网站jquery代码下载,wordpress主题模板中国lzw
1、查找所有表->2、查找所有字段->3、查找所有数据->4、生成SQL
开源 招聘源码,写java用vscode,UBUNTU磁盘分,tomcat开关命令,go 操作sqlite3,微信小程序有前端框架吗,爬虫族背后的统治者,php java基础,沈阳网站seo合作,网站验证码目录,网页源码视频,cms专用模板引擎lzw
备份注意点:
2=>需要列出所有字段名,字段类型等相关信息
3=>读取数据出来注意特殊符号的转换addslashes()
4=>把数据格式化生成对应的SQL
mysql_list_tables() 表查询函数,类似mysql_query() 函数
mysql_fetch_field() 字段信息函数,返回句柄
恢复注意点:
1、 注意数据库的大小,过大或者过多的表分段处理
2、 生成的SQL文件名或者存放不易被猜到
3、 备份生成文件可以表或者字段为单位保存
4、可以使用ZIP组件压缩生成的文件以便保持
迷你版代码:
<?php$mysql_dbname = "php100";mysql_connect("localhost", "root", "");mysql_select_db($mysql_dbname);$sql_list = mysql_list_tables($mysql_dbname);while ($row_data = mysql_fetch_row($sql_list)) {echo $row_data[0] . "
";get_table_fd($row_data[0], "sql");// $fp=fopen("sql/$tablename.sql","w+");// fwrite($fp,$field);// fclose($fp);}function get_table_fd($tablename) {$field = "CREATE TABLE `$tablename`(\n";$result = mysql_query("select * from $tablename");while ($meta = mysql_fetch_field($result)) {if ($meta->not_null)$not_null = "not_null";$field .= "`$meta->name` $meta->type($meta->max_length) $not_null; \n";}$field .= ")\n";return $field;}?>
在网上找到个不错的类库,可直接拿来用,记录一下
1、db.php 数据库类
2、backup.php 备份
3、restore.php 恢复
下载附件
db.php
1 linkid) @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败.");11@mysql_select_db($database,$this->linkid) or die("无法打开数据库");12mysql_query(set names gbk);13return $this->linkid;}14 15 function query($sql)16{if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid;17else {18 $this->err_report($sql,mysql_error);19return false;}20}21 22 function nr($sql_id="")23{if(!$sql_id) $sql_id=$this->sqlid;24return mysql_num_rows($sql_id);}25 26 function nf($sql_id="")27{if(!$sql_id) $sql_id=$this->sqlid;28return mysql_num_fields($sql_id);}29 30 function nextrecord($sql_id="")31{if(!$sql_id) $sql_id=$this->sqlid;32if($this->record=mysql_fetch_array($sql_id)) return $this->record;33else return false;34}35 36 function f($name)37{38if($this->record[$name]) return $this->record[$name];39else return false;40}41 42 function close() {mysql_close($this->linkid);}43 44 function lock($tblname,$op="WRITE")45{if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;}46 47 function unlock()48{if(mysql_query("unlock tables")) return true; else return false;}49 50 function ar() {51return @mysql_affected_rows($this->linkid);52 }53 54 function i_id() {55 return mysql_insert_id();56}57 58 function err_report($sql,$err)59{60 echo "Mysql查询错误
";61 echo "查询语句:".$sql."
";62 echo "错误信息:".$err;63}64 }?>
backup.php
1 16 17
37 query("show table status from $mysqldb")) 52{$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} 53 $sql=""; 54 while($d->nextrecord($tables)) 55{ 56$table=$d->f("Name"); 57$sql.=make_header($table); 58$d->query("select * from $table"); 59$num_fields=$d->nf(); 60while($d->nextrecord()) 61{$sql.=make_record($table,$num_fields);} 62} 63 $filename=date("Ymd",time())."_all.sql"; 64 if($_POST[weizhi]=="localpc") down_file($sql,$filename); 65 elseif($_POST[weizhi]=="server") 66{if(write_file($sql,$filename)) 67 $msgs[]="全部数据表数据备份完成,生成备份文件./backup/$filename\"; 68else $msgs[]="备份全部数据表失败"; 69show_msg($msgs); 70pageend(); 71} 72 /*-----------------不要卷结束*/}/*-----------------------*/ 73 /*-----------------分卷*/else{/*-------------------------*/ 74 if(!$_POST[filesize]) 75{$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} 76 if(!$tables=$d->query("show table status from $mysqldb")) 77{$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} 78 $sql=""; $p=1; 79 $filename=date("Ymd",time())."_all"; 80 while($d->nextrecord($tables)) 81 { 82$table=$d->f("Name"); 83$sql.=make_header($table); 84$d->query("select * from $table"); 85$num_fields=$d->nf(); 86while($d->nextrecord()) 87{$sql.=make_record($table,$num_fields); 88if(strlen($sql)>=$_POST[filesize]*1000){ 89 $filename.=("_v".$p.".sql"); 90 if(write_file($sql,$filename)) 91 $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件./backup/$filename\"; 92 else $msgs[]="备份表-".$_POST[ ablename]."-失败"; 93 $p++; 94 $filename=date("Ymd",time())."_all"; 95 $sql="";} 96} 97 } 98 if($sql!=""){$filename.=("_v".$p.".sql"); 99 if(write_file($sql,$filename))100 $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件./backup/$filename\";}101 show_msg($msgs);102 /*---------------------分卷结束*/}/*--------------------------------------*/103 /*--------备份全部表结束*/}/*---------------------------------------------*/104 105 /*--------备份单表------*/elseif($_POST[fzl]=="danbiao"){/*------------*/106 if(!$_POST[ ablename])107{$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();}108 /*--------不分卷*/if(!$_POST[fenjuan]){/*-------------------------------*/109 $sql=make_header($_POST[ ablename]);110 $d->query("select * from ".$_POST[ ablename]);111 $num_fields=$d->nf();112 while($d->nextrecord())113{$sql.=make_record($_POST[ ablename],$num_fields);}114 $filename=date("Ymd",time())."_".$_POST[ ablename].".sql";115 if($_POST[weizhi]=="localpc") down_file($sql,$filename);116 elseif($_POST[weizhi]=="server")117{if(write_file($sql,$filename))118 $msgs[]="表-".$_POST[ ablename]."-数据备份完成,生成备份文件./backup/$filename\";119else $msgs[]="备份表-".$_POST[ ablename]."-失败";120show_msg($msgs);121pageend();122}123 /*----------------不要卷结束*/}/*------------------------------------*/124 /*----------------分卷*/else{/*--------------------------------------*/125 if(!$_POST[filesize])126{$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}127 $sql=make_header($_POST[ ablename]); $p=1; 128$filename=date("Ymd",time())."_".$_POST[ ablename];129$d->query("select * from ".$_POST[ ablename]);130$num_fields=$d->nf();131while ($d->nextrecord()) 132{ 133 $sql.=make_record($_POST[ ablename],$num_fields);134 if(strlen($sql)>=$_POST[filesize]*1000){135 $filename.=("_v".$p.".sql");136 if(write_file($sql,$filename))137 $msgs[]="表-".$_POST[ ablename]."-卷-".$p."-数据备份完成,生成备份文件./backup/$filename\";138 else $msgs[]="备份表-".$_POST[ ablename]."-失败";139 $p++;140 $filename=date("Ymd",time())."_".$_POST[ ablename];141 $sql="";}142}143 if($sql!=""){$filename.=("_v".$p.".sql"); 144 if(write_file($sql,$filename))145 $msgs[]="表-".$_POST[ ablename]."-卷-".$p."-数据备份完成,生成备份文件./backup/$filename\";}146 show_msg($msgs);147 /*----------分卷结束*/}/*--------------------------------------------------*/148 /*----------备份单表结束*/}/*----------------------------------------------*/149 150 /*---*/}/*-------------主程序结束------------------------------------------*/151 152 function write_file($sql,$filename)153 {154 $re=true;155 if(!@$fp=fopen("./backup/".$filename,"w+")) {$re=false; echo "failed to open target file";}156 if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}157 if(!@fclose($fp)) {$re=false; echo "failed to close target file";}158 return $re;159 }160 161 function down_file($sql,$filename)162 {163ob_end_clean();164header("Content-Encoding: none");165header("Content-Type: ".(strpos($_SERVER[HTTP_USER_AGENT], MSIE) ? application/octetstream : application/octet-stream));166 167header("Content-Disposition: ".(strpos($_SERVER[HTTP_USER_AGENT], MSIE) ? inline; : attachment; )."filename=".$filename);168 169header("Content-Length: ".strlen($sql));170header("Pragma: no-cache");171 172header("Expires: 0");173echo $sql;174$e=ob_get_contents();175ob_end_clean();176 }177 178 function writeable($dir)179 {180181if(!is_dir($dir)) {182@mkdir($dir, 0777);183}184185if(is_dir($dir)) 186{187188if($fp = @fopen("$dir/test.test", w))189 {190 @fclose($fp);191@unlink("$dir/test.test");192$writeable = 1;193 } 194else {195 $writeable = 0;196}197198 }199200return $writeable;201 202 }203 204 function make_header($table)205 {global $d;206 $sql="DROP TABLE IF EXISTS ".$table."\n";207 $d->query("show create table ".$table);208 $d->nextrecord();209 $tmp=preg_replace("/\n/","",$d->f("Create Table"));210 $sql.=$tmp."\n";211 return $sql;212 }213 214 function make_record($table,$num_fields)215 {global $d;216 $comma="";217 $sql .= "INSERT INTO ".$table." VALUES(";218 for($i = 0; $i record[$i])."\"); $comma = ",";}220 $sql .= ")\n";221 return $sql;222 }223 224 function show_msg($msgs)225 {226 $title="提示:";227 echo "";235 }236 237 function pageend()238 {239 exit();240 }241 ?>
restore.php
<?/**************************界面结束*/}/*************************************//****************************主程序*/if($_POST[act]=="恢复"){/**************//***************服务器恢复*/if($_POST[ estorefrom]=="server"){/**************/if(!$_POST[serverfile]) {$msgs[]="您选择从服务器文件恢复备份,但没有指定备份文件";show_msg($msgs); pageend(); }if(!eregi("_v[0-9]+",$_POST[serverfile])) {$filename="./backup/".$_POST[serverfile]; if(import($filename)) $msgs[]="备份文件".$_POST[serverfile]."成功导入数据库"; else $msgs[]="备份文件".$_POST[serverfile]."导入失败"; show_msg($msgs); pageend(); }else { $filename="./backup/".$_POST[serverfile]; if(import($filename)) $msgs[]="备份文件".$_POST[serverfile]."成功导入数据库"; else {$msgs[]="备份文件".$_POST[serverfile]."导入失败";show_msg($msgs);pageend();} $voltmp=explode("_v",$_POST[serverfile]); $volname=$voltmp[0]; $volnum=explode(".sq",$voltmp[1]); $volnum=intval($volnum[0])+1; $tmpfile=$volname."_v".$volnum.".sql"; if(file_exists("./backup/".$tmpfile)) { $msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损"; $_SESSION[data_file]=$tmpfile; show_msg($msgs); sleep(3); echo ""; echo "location= estore.php;"; echo ""; } else { $msgs[]="此分卷备份全部导入成功"; show_msg($msgs); } }/**************服务器恢复结束*/}/********************************************//*****************本地恢复*/if($_POST[ estorefrom]=="localpc"){/**************/ switch ($_FILES[myfile][error]) { case 1: case 2: $msgs[]="您上传的文件大于服务器限定值,上传未成功"; break; case 3: $msgs[]="未能从本地完整上传备份文件"; break; case 4: $msgs[]="从本地上传备份文件失败"; break; case 0: break; } if($msgs){show_msg($msgs);pageend();}$fname=date("Ymd",time())."_".sjs(5).".sql";if (is_uploaded_file($_FILES[myfile][ mp_name])) { copy($_FILES[myfile][ mp_name], "./backup/".$fname);}if (file_exists("./backup/".$fname)){ $msgs[]="本地备份文件上传成功"; if(import("./backup/".$fname)) {$msgs[]="本地备份文件成功导入数据库"; unlink("./backup/".$fname);} else $msgs[]="本地备份文件导入数据库失败"; }else ($msgs[]="从本地上传备份文件失败");show_msg($msgs);/****本地恢复结束*****/}/****************************************************//****************************主程序结束*/}/**********************************//*************************剩余分卷备份恢复**********************************/if(!$_POST[act]&&$_SESSION[data_file]){ $filename="./backup/".$_SESSION[data_file]; if(import($filename)) $msgs[]="备份文件".$_SESSION[data_file]."成功导入数据库"; else {$msgs[]="备份文件".$_SESSION[data_file]."导入失败";show_msg($msgs);pageend();} $voltmp=explode("_v",$_SESSION[data_file]); $volname=$voltmp[0]; $volnum=explode(".sq",$voltmp[1]); $volnum=intval($volnum[0])+1; $tmpfile=$volname."_v".$volnum.".sql"; if(file_exists("./backup/".$tmpfile)) { $msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损"; $_SESSION[data_file]=$tmpfile; show_msg($msgs); sleep(3); echo ""; echo "location= estore.php;"; echo ""; } else { $msgs[]="此分卷备份全部导入成功"; unset($_SESSION[data_file]); show_msg($msgs); }}/**********************剩余分卷备份恢复结束*******************************/function import($fname){global $d;$sqls=file($fname);foreach($sqls as $sql) { str_replace("\r","",$sql); str_replace("\n","",$sql); if(!$d->query(trim($sql))) return false; }return true;}function show_msg($msgs){$title="提示:";echo "";}function pageend(){exit();}?>
PHP+MYSQL的数据库怎备份与还原?
有很多软件可以使用,比如phpmyadmin,sqlyog等等
下载一个phpmyadmin并且配置好(网上有如何配置),其中就有备份还原数据库的图标,很简单
补充:———————-
对啊,点导出,然后执行就可以了啊
php对mysql数据库的备份及还原:
能生成文件但是内容为空,说明:php执行没问题,mysqldump也运行,初步判断问题出在mysqldump没正常运行。建议你到服务器上运行 “C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump -uroot -hlocalhost -p123 –opt -B rsgl > ../bak/xxx.sql”
看能否正常生成sql文件
如果觉得《PHP数据库备份与恢复 PHP数据库备份恢复》对你有帮助,请点赞、收藏,并留下你的观点哦!