备份mysql(一表一文件)

<?php

$cfg_dbhost            ='localhost';//mysql主机
$cfg_dbname            ='sq_test';//数据库名
$cfg_dbuser            ='root';//数据库用户名
$cfg_dbpwd            ='123450';//数据库用户密码
$cfg_db_language    ='utf8';//数据库编码

class dbmysql{
    
public static $dbhost = 'localhost';
    
public static $dbname;
    
public static $dbuser = 'root';
    
public static $dbpass;
    
public static $charset = 'utf8';
    
public static $DB = null;
    
public $querycount = 0;

    
public function __construct()
    {
        self
::$dbhost = $GLOBALS['cfg_dbhost'];
        self
::$dbname = $GLOBALS['cfg_dbname'];
        self
::$dbuser = $GLOBALS['cfg_dbuser'];
        self
::$dbpass = $GLOBALS['cfg_dbpwd'];
        self
::$charset= $GLOBALS['cfg_db_language'];
        self
::connect();
    }
    
public function connect(){
            self
::$DB=mysql_connect(self::$dbhost,self::$dbuser,self::$dbpass);
            
if(!self::$DB){
                self
::sqlError('无法连接服务器!'.self::mysqlerror);exit("无法连接服务器!");;
            }
            
if(!mysql_select_db(self::$dbname)){
                self
::sqlError('无法连接数据库('.self::$dbname.')!'.self::mysqlerror);exit("无法连接数据库!");
            }
            
mysql_query("SET NAMES '".self::$charset."', character_set_client=binary, sql_mode='';",self::$DB);
    }

    
private function mysqlerror(){
        
return mysql_error();
    }

    
public function getTablesName(){
            
$res = mysql_query('SHOW TABLES FROM '.self::$dbname,self::$DB);
            
$tables=array();
              
while ($row=mysql_fetch_row($res))$tables[]=$row[0];
              
mysql_free_result($res);
               
return $tables;
    }
    
public function getFields($table){
            
$res=mysql_query('DESCRIBE '.$table,self::$DB);
            
$tables=array();
              
while($row=mysql_fetch_row($res))$tables[]=$row[0];
              
mysql_free_result($res);
               
return $tables;
    }

    
public function fetch_array($sql){
        
$res=mysql_query($sql,self::$DB);
        
$r=mysql_fetch_array($res);
        
mysql_free_result($res);
        
return $r;
    }

    
public function fetch_assoc($sql){
        
$q3=mysql_query($sql,self::$DB);    $ra=array();
        
while($data=mysql_fetch_assoc($q3)){
            
$ra[]=$data;
        }
        
mysql_free_result($q3);
        
return $ra;
    }
    
private function sqlError($message='',$info ='',$sql=''){//保存错误信息到文件
        echo "{".$message."<br/>DATE: ".date('Y-n-j H:i:s')."<br/>ERROR: ".$info."<br/>SQL: ".$sql."<br/>}<br/>";
    }
    
public function close(){
        self
::$DB =null;
    }
    
public function __destruct()
    {
        self
::close();
    }
}

/*---class end*/

function makedir($dirpath){
    
if(!$dirpathreturn 0;
    
$dirpath=str_replace("\\","/",$dirpath);    $mdir="";
    
foreach(explode("/",$dirpathas $val){
        
$mdir.=$val."/";
        
if($val==".."||$val==".")continue;
        
if(!is_dir($mdir)&&!file_exists($mdir)){
           
if(!@mkdir($mdir,0755)){
            
exit("创建目录 [".$mdir."]失败.");
           }
        }
    }
    
return true;
}

function delDirAndFile($dirName){
if($handle=opendir($dirName)){
   
while(false!==($item = readdir($handle))){
   
if($item !="."&&$item!=".."){
   
if(is_dir"$dirName/$item")){
       delDirAndFile( 
"$dirName/$item");
   }
else{   unlink("$dirName/$item");   }
   }
   }
   
closedir$handle );
   
ifrmdir$dirName ) )echo "成功删除目录: $dirName<br/>\n";
}
}

function filein($filename="databak/",$table='',$mysql=''){
    
$fp = fopen($filename.'/'.$table.'.sql','w');
    
fputs($fp,$mysql);
    
fclose($fp);
}

header("Content-Type:text/html;charset=utf-8");

$db=new dbmysql();

$table=$db->getTablesName();

$filename="databak/".date("Ymd");
$url=getcwd()."/databak/";
$handle = opendir($url);
while(false!==($file = readdir($handle))){
    
if ($file!="."&&$file!=".."&&is_dir($url."/".$file)) {
        
if(date("Ymd")-$file>5){delDirAndFile($url."/".$file);};
    }
}

makedir(
$filename);
foreach($table as $t){
    
$s1=$db->fetch_array("show create table `$t`");
    
$mysql="/*Time:".date("Y-m-d H:i:s")."    */\r\nDROP TABLE IF EXISTS `$t`;\r\n".$s1['Create Table'].";\r\n\r\n";
    
$a1=$db->fetch_assoc("select * from `$t`");
    
foreach ($a1 as $data){
        
$vals=array_values($data);
        
$vals=array_map('addslashes',$vals);
        
$vals=join("','",$vals);
        
$vals="'".$vals."'";
        
$mysql.="INSERT INTO `$t` VALUES ($vals);\r\n";
    }
    
$mysql.="\r\n";
    filein(
$filename,$t,$mysql);
}

echo "数据备份成功,生成备份文件   ".getcwd()."/".$filename."/<br/>程序自动清理5天以前的备份";

?>

 

posted @ 2010-05-28 11:54  Task  阅读(653)  评论(0编辑  收藏  举报