资源描述
Php:Mysql数据库备份脚本
配置文件
<?php
/*******
[Database Bakup v1.0] (C)2011 - 2012
The MySQL database backup and PHP program design
@Filename config.php $
@Author Gavin zhu(朱朱) $
@Date 2012-07-20 22:22:225
源码:QQ:1011885807,TELL:15186481797
**************/
$$dbhostname = "localhost"; //数据库主机
$dbusername = "root"; //数据库用户
$dbpassword = "root"; //数据库密码
$dbdataname = "love_zmh"; //数据库名称
$dbconntype = 0; //连接方式,1为持续连接,0为一般链接(虚拟主机用户推荐)
$app_name="zmh_";
$dbtablepre = "zgh_";
date_default_timezone_set("PRC");
$charset='utf8';
?>
<?php
<?php
/*******
[Database 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($dbhostname, $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, $dbusername, $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']."'");
}
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 (!@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' && function_exists('mysql_unbuffered_query')){
$query = mysql_unbuffered_query($SQL);
}else{
$query = @mysql_query($SQL);
}
$this->query_num++;
//echo $SQL.'<br>'.$this->query_num.'<br>';
//if (!$query) $this->halt('Query Error: ' . $SQL);
return $query;
}
function get_one($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 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);
}
}
if(function_exists('mysql_unbuffered_query')){
$query = mysql_unbuffered_query($SQL);
}else{
$query = @mysql_query($SQL);
}
$this->query_num++;
//echo $SQL.'<br>'.$this->query_num.'<br>';
//if (!$query) $this->halt('Update Error: ' . $SQL);
return $query;
}
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($query) {
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_error();
$sqlerrno = mysql_errno();
ob_end_clean();
$db_obstart==1 ? ob_start('ob_gzhandler') : ob_start();
echo"<html><head><title>$db_bbsname</title><style type='text/css'>P,BODY{FONT-FAMILY:tahoma,arial,sans-serif;FONT-SIZE:11px;}A { TEXT-DECORATION: none;}a:hover{ text-decoration: underline;}TD { BORDER-RIGHT: 1px; BORDER-TOP: 0px; FONT-SIZE: 16pt; COLOR: #000000;}</style><body>\n\n";
echo"<table style='TABLE-LAYOUT:fixed;WORD-WRAP: break-word'><tr><td>$msg";
echo"<br><br><b>The URL Is</b>:<br>http://$_SERVER[HTTP_HOST]$REQUEST_URI";
echo"<br><br><b>MySQL Server Error</b>:<br>$sqlerror ( $sqlerrno )";
echo"<br><br><b>You Can Get Help In</b>:<br><a target=_blank href=><b></b></a>";
echo"</td></tr></table>";
exit;
}
}
?>
<?php
<?php
/*******
[Database Bakup v1.0] (C)2011 - 2012
The MySQL database backup and PHP program design
@Filename 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)){
$tabledb=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 Zhu 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 && $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($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');
adminmsg('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++){
$bakfile.='<a href="data/'.$pre.$i.'.sql">'.$pre.$i.'.sql</a><br>';
}
}
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) || 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']=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');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');
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(!$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++){
$randval.= 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<$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_fetch_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($bakupdata)>$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){
$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['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 => $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 = $charset ? "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;
}
}
}
?>
展开阅读全文