Login   Register  
PHP Classes
elePHPant
Icontem

File: db_backup.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Nadir Latif  >  Large Database Backup  >  db_backup.php  >  Download  
File: db_backup.php
Role: Example script
Content type: text/plain
Description: sample file
Class: Large Database Backup
Backup large MySQL databases into multiple files
Author: By
Last change: edited the file to match the new format of the config file
Date: 2007-12-14 04:06
Size: 7,930 bytes
 

Contents

Class file image Download
<?
require_once 'mysql_backup.php';

$restart=$_GET['restart'];
$file_name="backup_details.csv";
$max_rows=50000 ;
$large_tables=array("");

$file_contents=file('connection_details.csv');
$days_to_keep_backup=10;

list(
$folder_name,$server_name)=explode('#',str_replace("\n","",str_replace("\n","",$file_contents[0])));
$folder_name=trim($folder_name);
$server_name=trim($server_name);

if(!
is_dir($folder_name))mkdir($folder_name,0777);                
else 
chmod($folder_name,0777);

/*$dir_list=filelist($folder_name,1,1);

if(count($dir_list)>$days_to_keep_backup)
{    
    for($count=0;$count<count($dir_list);$count++)
    {
        if($dir_list[$count]=='')continue;
        rmdirtree($folder_name.$dir_list[$count]); 
    }
}*/

chmod($folder_name,0755);

$path=$folder_name;

/**************************************************************************************************************************************/
list($user_name,$password,$database)=explode(':',str_replace("\n","",str_replace("\n","",$file_contents[1])));

$backup_obj = new BackupMySQL();

//----------------------- EDIT - REQUIRED SETUP VARIABLES -----------------------
$database=trim($database);

$backup_obj->server $server_name;
$backup_obj->port 3306;
$backup_obj->username $user_name;
$backup_obj->password $password;
$backup_obj->database $database;


//-------------------- OPTIONAL PREFERENCE VARIABLES ---------------------

//Add DROP TABLE IF EXISTS queries before CREATE TABLE in backup file.
$backup_obj->drop_tables true;

//Only structure of the tables will be backed up if true.
$backup_obj->struct_only false;

//Include comments in backup file if true.
$backup_obj->comments true;

$filename $folder_name.date('d-m-Y').'_'.$backup_obj->database.'.sql';

if(
$restart!=-1)
{
    if(
$restart=="1")
    {
        
$table_details=$backup_obj->GetTables($database);

        
$fp fopen($file_name'w');
        
        for(
$count=0;$count<count($table_details);$count++)
        {                    
            
fwrite($fp$table_details[$count].":0\r\n");                
        }
        
fclose($fp);
        
        
$fp fopen($filename'w');
        
fclose($fp);
        
        @
unlink($filename."gz");
    }
    
    
$file_contents=file($file_name);
    
    
$total_rows=0;
    
$table_count=count($file_contents);
    for(
$count=0;$count<$table_count;$count++)
    {
        list(
$table_name,$row_count,$start)=explode(':',str_replace("\r","",str_replace("\n","",$file_contents[$count])));
        
        if(
in_array($table_name,$large_tables))$max_rows=10000;
        else 
$max_rows=50000;
        
        if(
$start<$row_count || $row_count==0)
        {
            if((
$start+$max_rows)>$row_count)$end=($row_count-$start);
            else 
$end=$max_rows;
            
            
$str=$table_name.":".$row_count.":".($start+$end)."\r\n";
            
$file_contents[$count]=$str;
            
            if (!
$backup_obj->Execute($filename,$database,$table_name,$start,$end,$row_count))
            {
                
$output $backup_obj->error;
                echo 
"Error backing up table ".$table_name.". Details : ".$output;
            }
            else
            {
                
$total_rows+=$end;
                if(
$end!=0)echo "Rows ".$start."-".($start+$end-1)." of table ".$table_name." were successfully backed up.<br/>";
                else echo 
"Rows 0-0 of table ".$table_name." were successfully backed up.<br/>";
                if(
$total_rows>=$max_rows)echo '<br/>';
                
                
$fp fopen($file_name'w');
                for(
$counter=0;$counter<count($file_contents);$counter++)
                {        
                    
fwrite($fp$file_contents[$counter]);
                    if(
$total_rows>=$max_rows)echo $file_contents[$counter].'<br/>';
                }
                
fclose($fp);                                                                
            }
            
            if(
$total_rows>=$max_rows)break;
        }        
    }
}
else
{
    if (
gzcompressfile($filename,1)==false)
    {
        echo 
'<br/>Gzipped file could not be created.';
        return 
false;
    }
    else{
        echo 
'<br/>Gzipped file was sucessfully created.';
        
unlink($filename);
    }
}
/****************************************************************************
-Remove a directory and its sub directory.
****************************************************************************/        
function rmdirtree($dirname
{
    if (
is_dir($dirname)) 
    {    
        
//Operate on dirs only
        
$result=array();
        if (
substr($dirname,-1)!='/') {$dirname.='/';}    //Append slash if necessary
        
$handle opendir($dirname);
        while (
false !== ($file readdir($handle))) 
        {
            if (
$file!='.' && $file!= '..')
            {    
//Ignore . and ..
                
$path $dirname.$file;
                if (
is_dir($path)) 
                {    
//Recurse if subdir, Delete if file
                    
$result=array_merge($result,rmdirtree($path));
                }
                else
                {
                    
unlink($path);
                    
$result[].=$path;
                }
            }
        }
        
closedir($handle);
        
rmdir($dirname);    //Remove dir
        
$result[].=$dirname;
        return 
$result;    //Return array of deleted items
    
}
    else
    {
        return 
false;    //Return false if attempting to operate on a file
    
}
}
/****************************************************************************
-Used to list all files in a directory.
****************************************************************************/    
function filelist ($startdir="./"$searchSubdirs=1$directoriesonly=0$maxlevel="all"$level=1
{
    
//list the directory/file names that you want to ignore
    
$ignoredDirectory[] = ".";
    
$ignoredDirectory[] = "..";
    
$ignoredDirectory[] = "_vti_cnf";
    global 
$directorylist;    //initialize global array
    
if (is_dir($startdir)) {
        if (
$dh opendir($startdir)) {
            while ((
$file readdir($dh)) !== false) {
                if (!(
array_search($file,$ignoredDirectory) > -1)) {
                    if (
filetype($startdir $file) == "dir") {
                        
//build your directory array however you choose;
                        //add other file details that you want.
                        
$directorylist[$startdir $file]['level'] = $level;
                        
$directorylist[$startdir $file]['dir'] = 1;
                        
$directorylist[$startdir $file]['name'] = $file;
                        
$directorylist[$startdir $file]['path'] = $startdir;
                        if (
$searchSubdirs) {
                            if (((
$maxlevel) == "all") or ($maxlevel $level)) {
                                
filelist($startdir $file "/"$searchSubdirs$directoriesonly$maxlevel$level 1);
                            }
                        }
                    } else {
                        if (!
$directoriesonly) {
                            
//if you want to include files; build your file array 
                            //however you choose; add other file details that you want.
                            
$directorylist[$startdir $file]['level'] = $level;
                            
$directorylist[$startdir $file]['dir'] = 0;
                            
$directorylist[$startdir $file]['name'] = $file;
                            
$directorylist[$startdir $file]['path'] = $startdir;
            }}}}
            
closedir($dh);
    }}
    return(
$directorylist);
}
/****************************************************************************
-Used to gzip a file on disk.
****************************************************************************/    
function gzcompressfile($source,$level=false)
{
    
$dest=$source.'.gz';
    
$mode='wb'.$level;
    
$error=false;
    if(
$fp_out=gzopen($dest,$mode))
    {
        if(
$fp_in=fopen($source,'rb'))
        {
            while(!
feof($fp_in))gzwrite($fp_out,fread($fp_in,4096));
            
fclose($fp_in);
        }
        else 
$error=true;
        
gzclose($fp_out);
    }
    else 
$error=true;
    if(
$error) return false;
    else return 
$dest;

/**************************************************************************************************************************************/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>MySQL Backup</title>
</head>
<body>
<?
if($restart!=-1)echo $output;
if(
$restart!=-1&&$count<$table_count)echo '<script>location.href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'].'?restart=0"</script>';    
else if(
$restart!=-1) echo '<script>location.href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'].'?restart=-1"</script>';

?>
</body>
</html>