MySQL Backup

This is a fast easy way to script a database backup

Code Repository :: MySQL Cron Backup

This code is available for public use. You may copy, distribute, and eat this code as you wish. However, the license remains in effect for the life of the software.

Pretense for download and use "[Lf] Libraries":

  • You may not use this code in a commercial setting without prior consent from [Lf].
  • You may not misrepresent yourself as the author of this code.
  • You may make changes to this code, but must make the changes available under this license.
  • These libraries are governed by their respective licenses.
<?php
    
class EVENTS
{

    public function 
__construct(){}

    public function 
runEvent$mode null ) {

        if( 
$mode == 'cron-daily' )
            return 
$this->runCronDaily();

        if( 
$mode == 'cron-discretionary' )
            return 
$this->runCronOccasional();

        return 
'no mode';
    }

    private function 
runCronDaily() {

        
// includes
        
include_once( getConfObj('dir_libs') . 'INVOICE.php' );
        include_once( 
getConfObj('dir_libs') . 'MODERATE.php' );
        include_once( 
getConfObj('dir_libs') . 'ACCOUNTING.php' );

        
//vars
        
$dialog_success '';
        
$dialog_fail 'Invoice send failed';

        
$d = new DATA();
        
$schedule_arry $d->unpackItemsgetConfObj('event_send_schedule') );

        
// classes
        
$mod = new MODERATE();
        foreach( 
$schedule_arry as $target_day ) {

            if( 
true === ( $r $mod->generateInvoice( array( 'mode' => 'day''days' => $target_day ) ) ) ) {
                  
$dialog_success .= ', ' $target_day .' day';
            }
        }
        return 
'Invoices sent for ' $dialog_success;
    }

    private function 
runCronOccasional() {
        global 
$SECURE_CONF;

        
//vars
        
$dialog_success true;
        
$dialog_fail 'Task Failed';

        
ignore_user_abort(true);
        if( 
/* !empty($_POST) || */ defined('DOING_AJAX') || defined('DOING_CRON') )
            die();

        
/**
         * Tell us we are doing the CRON task.
         *
         * @var bool
         */
        
define('DOING_CRON'true);
        
$bkup = new SQLBKUP$SECURE_CONF['MYSQL_DATABASE'], '*' );

        return 
$dialog_success;
    }

}

/**
* MySQL BACKUP PHP SCRIPT
*
* php 5
*
*
* LICENSE: Use of this library is governed by the Creative Commons License Attribution 2.5.
* You can check it out at: http://creativecommons.org/licenses/by/2.5/legalcode
*
* - You may copy, distribute, and eat this code as you wish. You must give me credit for
* writing it. You may not misrepresent yourself as the author of this code.
* - You may not use this code in a commercial setting without prior consent from me.
* - If you make changes to this code, you must make the changes available under a license like
* this one.
*
* @category   DB Managment
* @author     R. Fritz The-Jovial <general@lionflux.com>
* @copyright  2012 LionFlux - R. Fritz The-Jovial
* @license    http://creativecommons.org/licenses/by/2.5/legalcode CC 2.5
* @link       http://www.lionflux.com.com/code/do/sql-backup
*
**/
/**
* MySQL BACKUP PHP SCRIPT
*
* @version    Release: 1.0
* @link        http://www.lionflux.com.com/code/do/sql-backup
* @ModDate    2012-07-26
*
**/
/**
* MySQL BACKUP PHP CLASS
*
* Automatically backs up MySQL database to file and saves it.
* Don't use that shit php code  that is all over the internet.
* 50,000 sql inserts is not cool.
*
* This script output mimics what the actual MYSQL export output would be, with out
* calling any system() commands. Groups 499 inserts together in to a gang, making importing MUCH faster.
* Don't risk the security of your system just to backup your mysql database.
*
*/

/**
* run backup
*/
//$bkup = new SQLBKUP($MYSQL_DATABASE);

// DONE
//   :]

class SQLBKUP
{
    
// vars
    
private $sql_resource null;
    private 
$field_data = array();
    private 
$ext =  'txt';
    private 
$db null// database class

    //status
    
protected $running false;

    public function 
isRunning() {
        return 
$this->running;
    }

    public function 
__construct$name$tables '*' ) {
        
$this->running true;

        
$this->db = new DATABASE();

        
//get all of the tables
        
if($tables == '*') {
          
$tables = array();
          
$result $this->db->query('SHOW TABLES');
          
// commit tables names to array
          
while( $row mysqli_fetch_row$result ) ) {
            
$tables[] = $row[0];
            }
        } else {
              
// or if tables is an array move on
              
$tables is_array$tables ) ? $tables explode(','$tables );
        }
        
$out null;
        
//cycle through each table
        
foreach( $tables as $table ) {
            
$out .= $this->processTable$table );
        }
        
$this->toFile$name$tables$out );
        
$this->running false;
    }

    private function 
processTable$table ) {
      
// get sql resource
      
$resource $this->sqlTableRequest$table );
      
// get all table data
      
$field_count $this->getTableFields$resource );
      
$cell_data $this->getTableCellData$resource$field_count );
      
// prep all statements
      
$create_table $this->createTable$table );
      
$insert_statement $this->getInsertStatement$table$field_count );
      
// table create statement
      
$out "\n" trim($create_table) . ";\n\n";
      
//init loop vars
      
$count 0;
      
$out .= "--\n";
      
$out .= "-- Dumping data for table `" $table "`\n";
      
$out .= "--\n\n";
      
// loop through data
      
while( $count count$cell_data ) ) {
      
// start count
      
$iteration_count $count 498;
      
// table insert statement
      
$out .= $insert_statement;

      
// only allow insert statement to be 499 row tall
       
while ( $count $iteration_count && $count count$cell_data ) ) {
          
$row "\n(";
          
$row .= implode", " $cell_data$count ] );
          
$row rtrim$row", ");
          
$row .= "),";
          
$out .= $row;
          
$count++;
      };
      
$out rtrim$out"," );
      
$out .= ";\n";
      }

      
$out .= "\n";
      
$out .= "-- --------------------------------------------------------\n";
      return 
$out;
    }

    private function 
getTableFields$sql_res ) {
      
// sql call
      
$field mysqli_num_fields$sql_res );
      
$this->field_data = array();
      
// loop through fields
      
for($count 0$count $field$count++) {

      
// 2d array
      
$this->field_data$count ] = array();

      
// store name and attributes
            
if( $property mysqli_fetch_field$sql_res ) ) {
                
$this->field_data$count ][ 'name' ] = $property->name;
                
$this->field_data$count ][ 'type' ] = $property->type;
                
$this->field_data$count ][ 'length' ] = $property->length;
                
$this->field_data$count ][ 'flags' ] = $property->flags;
            }
      }

      return 
$field;
    }

    private function 
getTableCellData($sql_res$field_count) {
      
// call all data from table
      // init loop vars
      
$data = array();
      
$row_count = -1;
      
// loop through rows
      
while( false != ($row mysqli_fetch_row$sql_res ) ) ) {
          
// init 2d array
          
$data[ ++$row_count ] = array();
          
// loop through all data for each row, commit to array
          
for ( $i 0$i $field_count$i++ ) {
              
// sanitize
              
$cell addslashes$row[$i] );
                
// ecape linebreaks
                
$cell str_replace"\n""\\n"$cell );
              
// if cell is empty insert place holder
              
$data$row_count ][ $i ] = $this->field_data[$i]['type'] == 'int'
                
$cell
                
"'"$cell ."'";
          }
      }
      return 
$data;
    }

    private function 
sqlTableRequest$table ) {
        
$this->sql_resource $this->db->query('SELECT * FROM ' $table );
        return 
$this->sql_resource;
    }

    private function 
createTable($table) {
        
$create_table mysqli_fetch_row$this->db->query'SHOW CREATE TABLE ' $table  ) );
        
$out "--\n";
        
$out .= "-- Table structure for table `" $table .  "`\n";
        
$out .= "--\n\n";
        
$out .= str_replace'CREATE TABLE''CREATE TABLE IF NOT EXISTS'$create_table[1] );
        return 
$out;
    }
    private function 
getInsertStatement$table_name ) {
        
// init loop vars
        
$data null;
        
$field_str null;

        
//print_r($this->field_data);

        // loooooooooooop
        
foreach( $this->field_data as $label ) {
          
$field_str .= '`' $label['name'] . '`, ';
        }
        
// trim following ','
        
$field_str rtrim$field_str', ' );
        
// tada
        
return 'INSERT INTO `' $table_name '` (' $field_str ') VALUES ';
    }

    private function 
toFile$name$tables$data ) {

      
$header "--\n\n";
      
$header .= '-- Database: ' $name "\n";
      
$header .= "--\n\n";
      
$header .= "CREATE DATABASE "$name " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;\n";
      
$header .= "--\n\n";
      
$header .= "USE `" $name "`;\n\n";
      
$header .= "-- --------------------------------------------------------\n\n";
      
$data $header $data;

      
//save file
      
$file_op fopengetConfObj('dir_backup') . '/db/' '/db-bkup-' date("Ymd") . '-' .
          ( 
md5implode','$tables ) ) ) . '.' $this->ext'w+' );
          
fwrite$file_op$data );
          return 
fclose$file_op );
    }
}

?>

URL Buffer

The following is a change log of URL updates: