This is something I quickly whipped up for a friend. Instead of generating a sql script or a bak file, it generates a PHP script file that will allow to recreate your database using PHP's MySQL functions. It will restore everything you had in your database.
It restores using the UTF-8 character set and does not support views, triggers or stored procedures.
If you use this, it's recommended that you set up a cronjob so it backs up regularly.
Class:
Example:PHP Code:<?php
interface ibackup
{
public function params( $dbServer, $user, $password, $file = 'default', $dbName = null );
public function mysql();
}
final class backup implements ibackup
{
private $dbserver,
$user,
$password,
$file,
$dbname;
public function params( $dbServer, $user, $password, $file = 'default', $dbName = null )
{
$date = date( 'Ymd_Hi' );
$this->dbserver = $dbServer;
$this->user = $user;
$this->password = $password;
$this->file = ($file == 'default' ) ? 'backup_' . $date . '.php' : $file;
$this->dbname = $dbName;
}
public function mysql()
{
$fd = fopen( $this->file, 'w' );
$t = date( 'H:i:s' );
$d = date( 'Y/m/d' );
$head = "<?php\n\n
/* \$Id: {$this->file},v 1.0 $d $t $ */
/*
* MySQL Backup by:
* Exiled Hero
*/
\$user = '{ $this->user }';\n
\$password = '{ $this->password }';\n
\$con = mysql_connect(' { $this->dbserver }', \$user, \$password );
\n\n";
fwrite( $fd, $head );
$con = mysql_connect( $this->dbserver, $this->user, $this->password );
$dblist = mysql_list_dbs( $con );
while( $row = mysql_fetch_object( $dblist ) )
{
$db = $row->Database;
if( $db !== 'mysql' )
{
$dbcreate = 'mysql_query( "CREATE DATABASE `$db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci\" );';
fwrite( $fd, '$dbcreate\n' );
$dbselect = mysql_select_db( $db );
fwrite( $fd, "mysql_select_db( '$db' ); \n" );
$tbl = mysql_list_tables( $db );
while( $table = mysql_fetch_row( $tbl ) )
{
$fld = mysql_query( "SELECT * FROM `$table[0]`" );
if( $fld )
$fields = mysql_num_fields( $fld );
else
$fields = 0;
unset( $tblcreate );
$tblcreate = "CREATE TABLE `$table[0]` (";
$arrfield = array();
$arrfieldnum = 0;
for( $i = 0; $i < $fields; $i++ )
{
$fieldinfo = mysql_fetch_field( $fld, $i );
unset( $fieldname );
$fieldname = $fieldinfo->name;
$arrfield[ $arrfieldnum ] = $fieldname;
$arrfieldnum++;
$fieldlen = mysql_field_len( $fld, $i );
if( $fieldlen == '65535' )
{
$fieldtype = 'TEXT';
}
else
{
$fieldtype = 'VARCHAR(' . $fieldlen . ')';
}
$tblcreate .= "`$fieldname` $fieldtype NOT NULL";
if( $i !== $fields - 1 )
{
$tblcreate .= ", ";
}
}
$tblcreate .= ')';
fwrite( $fd, " mysql_query(\"$tblcreate\", \$con);\n" );
$readtable = "SELECT * FROM `$table[0]`";
$retval = mysql_query( $readtable );
if( $retval )
while( $col = mysql_fetch_row( $retval ) )
{
$insert = "mysql_query(\"INSERT INTO `$table[0]` (";
for( $ifield = 0; $ifield < count( $arrfield ) - 1; $ifield++ )
{
$insert .= "`{$arrfield[$ifield]}`, ";
}
$insert .= "`{$arrfield[$ifield]}`) VALUES(";
for( $icol = 0; $icol < count( $col ) - 1; $icol++ )
{
$col[$icol] = str_replace( "\"", "'", $col[$icol] );
$insert .= "'{$col[$icol]}', ";
}
$insert .= "'{$col[$icol]}'";
$insert .= ")\", \$con);";
fwrite( $fd, " $insert\n" );
}
}
}
}
mysql_close( $con );
$tail = "\nmysql_close(\$con);\n\n
?>\n\n
<html><title>MySQL Restoration by Exiled Hero</title><body>\n
<font face=\"arial\" size=4 color=\"#000000\"><b>Database Restored!</b></font>\n
</body></html>";
fwrite( $fd, $tail );
fclose( $fd );
}
}
/* EOF */
PHP Code:$backup = new backup;
$backup->params( '127.0.0.1', 'dbuser', 'dbpassword' );
$backup->mysql();
unset( $backup );



Reply With Quote


