1、Php:Mysql数据库备份脚本 配置文件
2、 //数据库主机 $dbusername = "root"; //数据库用户 $dbpassword = "root"; //数据库密码 $dbdataname = "love_zmh"; //数据库名称 $dbconntype = 0; //连接方式,1为持续连接,0为一般链接(虚拟主机用户推荐) $app_name="zmh_"; $dbtablepre = "zgh_"; date_default_timezone_set("PRC"); $charset='utf8'; ?>
3、se Bakup v1.0] (C)2011 - 2012 The MySQL database backup and PHP program design @Filename db_mysql.php $ @Author Gavin zhu(朱朱) $ @Date 2012-07-20 22:22:225 **************/ !function_exists('readover') && exit('Forbidden'); Class DB { var $query_num = 0; function DB($dbhostn
4、ame, $dbusername, $dbpassword, $dbdataname, $dbconntype = 0) { $this->connect($dbhostname, $dbusername, $dbpassword, $dbdataname, $dbconntype); } function connect($dbhostname, $dbusername, $dbpassword, $dbdataname, $dbconntype = 0) { $dbconntype==0 ? @mysql_pconnect($dbhostname, $dbusernam
5、e, $dbpassword) : @mysql_pconnect($dbhostname, $dbusername, $dbpassword); mysql_errno()!=0 && $this->halt("Connect($dbconntype) to MySQL ($dbhostname,$dbusername) failed"); if($this->server_info() > '4.1' && $GLOBALS['charset']){ mysql_query("SET NAMES '".$GLOBALS['charset']."'"); }
6、if($this->server_info() > '5.0'){ mysql_query("SET sql_mode=''"); } if($dbdataname) { if (!@mysql_select_db($dbdataname)){ $this->halt('Cannot use database '.$dbdataname); } } } function close() { return mysql_close(); } function select_db($dbdataname){ if (!@
7、mysql_select_db($dbdataname)){ $this->halt('Cannot use database '.$dbdataname); } } function server_info(){ return mysql_get_server_info(); } function query($SQL,$method='') { $GLOBALS['ZGH']=='zgh_' or $SQL=str_replace('zgh_',$GLOBALS['ZGH'],$SQL); if($method=='U_B' && funct
8、ion_exists('mysql_unbuffered_query')){
$query = mysql_unbuffered_query($SQL);
}else{
$query = @mysql_query($SQL);
}
$this->query_num++;
//echo $SQL.'
'.$this->query_num.'
';
//if (!$query) $this->halt('Query Error: ' . $SQL);
return $query;
}
function get_o
9、ne($SQL){ $query=$this->query($SQL,'U_B'); $rs =& mysql_fetch_array($query, MYSQL_ASSOC); return $rs; } function zgh_update($SQL_1,$SQL_2,$SQL_3){ $rt=$this->get_one($SQL_1); if($rt){ $this->update($SQL_2); } else{ $this->update($SQL_3); } } function
10、update($SQL) { $GLOBALS['ZGH']=='zgh_' or $SQL=str_replace('zgh_',$GLOBALS['ZGH'],$SQL); if($GLOBALS['db_lp']==1){ if(substr($SQL,0,7)=='REPLACE'){ $SQL=substr($SQL,0,7).' LOW_PRIORITY'.substr($SQL,7); } else{ $SQL=substr($SQL,0,6).' LOW_PRIORITY'.substr($SQL,6); } }
11、 if(function_exists('mysql_unbuffered_query')){
$query = mysql_unbuffered_query($SQL);
}else{
$query = @mysql_query($SQL);
}
$this->query_num++;
//echo $SQL.'
'.$this->query_num.'
';
//if (!$query) $this->halt('Update Error: ' . $SQL);
return $query;
}
12、function fetch_array($query, $result_type = MYSQL_ASSOC) { return mysql_fetch_array($query, $result_type); } function affected_rows() { return mysql_affected_rows(); } function num_rows($query) { $rows = mysql_num_rows($query); return $rows; } function free_result($quer
13、y) { return mysql_free_result($query); } function insert_id() { $id = mysql_insert_id(); return $id; } function halt($msg='') { new DB_ERROR($msg); } } Class DB_ERROR { function DB_ERROR($msg) { global $db_bbsname,$db_obstart,$REQUEST_URI; $sqlerror = mysql_er
14、ror(); $sqlerrno = mysql_errno(); ob_end_clean(); $db_obstart==1 ? ob_start('ob_gzhandler') : ob_start(); echo"
| $msg";
echo" The URL Is: http://$_SERVER[HTTP_HOST]$REQUEST_URI"; echo" MySQL Server Error 16、>: |
17、 bakup.php $ @Author Gavin zhu(朱朱) $ @Date 2012-07-20 22:22:225 **************/ !function_exists('adminmsg') && exit('Forbidden'); $timestamp=time(); if(!$a_type)$a_type='bakout'; $basename="$admin_file?adminjob=bakup&a_type=$a_type"; if($a_type=='bakout'){ if(empty($action)){ $ta
18、bledb=array(); $othortable=array(); $query = $db->query("SHOW TABLES"); while ($rt = $db->fetch_array($query)){ $value = trim(current($rt)); $othortable[]=$value; } include PrintEot('bakup');exit; } else{ $bak="\nFilename:Gavin Zhu Database bakup file\n##########Gavin Zh
19、u Database bakup version:v1.0\n#Time: ".date('Y-m-d H:i:s')."\nAuthor:Gavin zhu(朱朱) ---------\n\n\n"; $db->query("SET SQL_QUOTE_SHOW_CREATE = 0"); $start = intval($start); !$tabledb && !$tablesel && adminmsg('operate_error'); !$tabledb && $tabledb=explode("|",$tablesel); !$step && $
20、sizelimit/=2; $bakupdata=bakupdata($tabledb,$start); if(!$step){ !$tabledb && adminmsg('operate_error'); $tablesel=implode("|",$tabledb); $step=1; $start=0; $pre='zgh_'.get_date($timestamp,'md').'_'.num_rand(10).'_'; $bakuptable=bakuptable($tabledb); } $f_num=ceil
21、step/2); $filename=$pre.$f_num.'.sql'; $step++; $writedata=$bakuptable ? $bakuptable.$bakupdata : $bakupdata; $t_name=$tabledb[$tableid-1]; $c_n=$startfrom; if($stop==1){ $files=$step-1; trim($writedata) && writeover(D_P.'data/'.$filename,$bak.$writedata,'ab'); admi
22、nmsg('bakup_step',"$basename&action=$action&start=$startfrom&tableid=$tableid&sizelimit=$sizelimit&step=$step&pre=$pre&tablesel=$tablesel&rows=$rows",1); } else{ trim($writedata) && writeover(D_P.'data/'.$filename,$bak.$writedata,'ab'); if($step>1){ for($i=1;$i<=$f_num;$i++){ $
23、bakfile.=''.$pre.$i.'.sql
';
}
}
adminmsg('bakup_out');
}
}
} elseif($a_type=='bakin'){
if(empty($action)){
$filedb=array();
$handle=opendir(D_P.'data');
while($file = readdir($handle)){
if((!$dbtablepre || eregi("^zgh_",$file)
24、 eregi("^$dbtablepre",$file)) && eregi("\.sql$",$file)){ $strlen=eregi("^$dbtablepre",$file) ? 16 + strlen($dbtablepre) : 19; $fp=fopen(D_P."data/$file",'rb'); $bakinfo=fread($fp,200); fclose($fp); $detail=explode("\n",$bakinfo); $bk['name']=$file; $bk['version']
25、substr($detail[2],10); $bk['time']=substr($detail[3],7); $bk['pre']=substr($file,0,$strlen); $bk['num']=substr($file,$strlen,strrpos($file,'.')-$strlen); $filedb[]=$bk; } } include PrintEot('bakup');exit; } elseif($action=='bakincheck'){ include PrintEot('bakup');
26、exit; } elseif($action=='bakin'){ if(!$count){ $count=0; $handle=opendir(D_P.'data'); while($file = readdir($handle)){ if(eregi("^$pre",$file) && eregi("\.sql$",$file)){ $count++; } } } !$step && $step=1; /* $sql=readover(D_P.'data/'.$pre.$step.'.sql'
27、); bakindata($sql); */ bakindata(D_P.'data/'.$pre.$step.'.sql'); $i=$step; $step++; if($count > 1 && $step <= $count){ adminmsg('bakup_in',"$basename&action=bakin&step=$step&count=$count&pre=$pre",1); } adminmsg('operate_success'); } elseif($action=='del'){ if(!
28、delfile)adminmsg('operate_error'); foreach($delfile as $key => $value){ if(eregi("\.sql$",$value)){ P_unlink(D_P."data/$value"); } } adminmsg('operate_success'); } } function num_rand($lenth){ mt_srand((double)microtime() * 1000000); for($i=0;$i<$lenth;$i++){ $randv
29、al.= mt_rand(0,9); } $randval=substr(md5($randval),mt_rand(0,32-$lenth),$lenth); return $randval; } function bakupdata($tabledb,$start=0){ global $db,$sizelimit,$tableid,$startfrom,$stop,$rows; $tableid=$tableid?$tableid-1:0; $stop=0; $t_count=count($tabledb); for($i=$tableid;$i<
30、t_count;$i++){ if(!$rows){ $ts=$db->get_one("SHOW TABLE STATUS LIKE '$tabledb[$i]'"); $rows=$ts['Rows']; } $limitadd="LIMIT $start,100000"; $query = $db->query("SELECT * FROM $tabledb[$i] $limitadd"); $num_F = mysql_num_fields($query); while ($datadb = mysql_f
31、etch_row($query)){ $start++; $bakupdata .= "INSERT INTO $tabledb[$i] VALUES("."'".mysql_escape_string($datadb[0])."'"; $tempdb=''; for($j=1;$j<$num_F;$j++){ $tempdb.=",'".mysql_escape_string($datadb[$j])."'"; } $bakupdata .=$tempdb. ");\n"; if($sizelimit && strlen($b
32、akupdata)>$sizelimit*1000){ break; } } $db->free_result($query); if($start>=$rows){ $start=0; $rows=0; } $bakupdata .="\n"; if($sizelimit && strlen($bakupdata)>$sizelimit*1000){ $start==0 && $i++; $stop=1; break; } $start=0; } if($stop==1)
33、{ $i++; $tableid=$i; $startfrom=$start; $start=0; } return $bakupdata; } function bakuptable($tabledb){ global $db; foreach($tabledb as $key=>$table){ $creattable.= "DROP TABLE IF EXISTS $table;\n"; $CreatTable = $db->get_one("SHOW CREATE TABLE $table"); $CreatTable[
34、'Create Table']=str_replace($CreatTable['Table'],$table,$CreatTable['Create Table']); $creattable.=$CreatTable['Create Table'].";\n\n"; } return $creattable; } function bakindata($filename) { global $db,$charset; $sql=file($filename); $query=''; $num=0; foreach($sql as $key => $
35、value){ $value=trim($value); if(!$value || $value[0]=='#') continue; if(eregi("\;$",$value)){ $query.=$value; if(eregi("^CREATE",$query)){ $extra = substr(strrchr($query,')'),1); $query = str_replace($extra,'',$query); if($db->server_info() > '4.1'){ $extra = $c
36、harset ? "ENGINE=MyISAM DEFAULT CHARSET=$charset;" : "ENGINE=MyISAM;"; }else{ $extra = "TYPE=MyISAM;"; } $query .= $extra; }elseif(eregi("^INSERT",$query)){ $query='REPLACE '.substr($query,6); } $db->query($query); $query=''; } else{ $query.=$value; } } } ?>






