Email Backup Automatik te databazave MySQL - AlbDEVs

×
Albanian Forums, Zerion Zeri yt Zeri Info, Forumi Shqiptar Al Virtual, Diskutime, Biseda, Chat Njofje, Informatika, Teknologjia, Gazeta Tema, Gazetat Shqiptare, Bota Sot, www Channel Albania, Telegrafi Kosovo, Ballkani Web, Gazeta Lajme shqip, Lajmet e Fundit Shqiperia Kosova, Dita, Panorama, Kryeartikull, Faqja Kryesore, Video Shqip, Muzike Shqipe, Njoftime, Lajmerime, Temat Online, Gazetat, Kosovare, Shtypi Ditor, Sporti Shqiptar, Dashuria, Pyetje Pergjigje, Keshilla, Ndihme, Webmaster Shqiptar, Familja, Shqiptaria, Muzika, Receta Gatimi, Imazhe, Vipat-shqiptar, Aktualiteti
Media Sociale
Mesazhe Private
Shqiptaret duke lexuar tema interesante dhe te ndryshme
Tema re

Email Backup Automatik te databazave MySQL

Email Backup Automatik te databazave MySQL

· 1 · 1777

  • Postime: 577
  • Karma: +0/-0

ne: 28-07-2009, 13:56:17
Pershendetje :)

Dua te ndaj me ju nje script qe e kam perdorur per nje kohe te gjate. Scripti ben backup automatikisht te te gjitha databazave MySQL ne server, i zipon ato dhe ruan nje kopje lokale, dhe ju dergon komplet arshiven e databazave me email cdo x dite.

Perbehet nga dy files ne php.
backup_dbs.php:
Kodi: [Zgjidh]
<?php

######################################################################
## MySQL Backup Script v2.1 - May 3, 2007
######################################################################
## For more documentation and new versions, please visit:
## http://www.dagondesign.com/articles/automatic-mysql-backup-script/
## -------------------------------------------------------------------
## Created by Dagon Design (www.dagondesign.com).
## Much credit goes to Oliver Mueller (oliver@teqneers.de)
## for contributing additional features, fixes, and testing.
######################################################################

######################################################################
## Usage Instructions
######################################################################
## This script requires two files to run:
##     backup_dbs.php        - Main script file
##     backup_dbs_config.php - Configuration file
## Be sure they are in the same directory.
## -------------------------------------------------------------------
## Do not edit the variables in the main file. Use the configuration
## file to change your settings. The settings are explained there.
## -------------------------------------------------------------------
## A few methods to run this script:
## - php /PATH/backup_dbs.php
## - BROWSER: http://domain/PATH/backup_dbs.php
## - ApacheBench: ab "http://domain/PATH/backup_dbs.php"
## - lynx http://domain/PATH/backup_dbs.php
## - wget http://domain/PATH/backup_dbs.php
## - crontab: 0 3  * * *     root  php /PATH/backup_dbs.php
## -------------------------------------------------------------------
## For more information, visit the website given above.
######################################################################

error_reportingE_ALL );

// Initialize default settings
$MYSQL_PATH = &#39;/usr/bin&#39;;
$MYSQL_HOST = &#39;localhost&#39;;
$MYSQL_USER = &#39;root&#39;;
$MYSQL_PASSWD = &#39;password&#39;;
$BACKUP_DEST = &#39;/db_backups&#39;;
$BACKUP_TEMP = &#39;/tmp/backup_temp&#39;;
$VERBOSE true;
$BACKUP_NAME = &#39;mysql_backup_&#39; . date(&#39;Y-m-d&#39;);
$LOG_FILE $BACKUP_NAME . &#39;.log&#39;;
$ERR_FILE $BACKUP_NAME . &#39;.err&#39;;
$COMPRESSOR = &#39;bzip2&#39;;
$EMAIL_BACKUP false;
$DEL_AFTER false;
$EMAIL_FROM = &#39;Backup Script&#39;;
$EMAIL_SUBJECT = &#39;SQL Backup for &#39; . date(&#39;Y-m-d&#39;) . &#39; at &#39; . date(&#39;H:i&#39;);
$EMAIL_ADDR = &#39;user@domain.com&#39;;
$ERROR_EMAIL = &#39;user@domain.com&#39;;
$ERROR_SUBJECT = &#39;ERROR: &#39; . $EMAIL_SUBJECT;
$EXCLUDE_DB = &#39;information_schema&#39;;
$MAX_EXECUTION_TIME 18000;
$USE_NICE = &#39;nice -n 19&#39;;
$FLUSH false;
$OPTIMIZE false;

// Load configuration file
$current_path dirname(__FILE__);
if( 
file_exists$current_path.&#39;/backup_dbs_config.php&#39; ) ) {
require( $current_path.&#39;/backup_dbs_config.php&#39; );
} else {
echo &#39;No configuration file [backup_dbs_config.php] found. Please check your installation.&#39;;
exit;
}

################################
# functions
################################
/**
 * Write normal/error log to a file and output if $VERBOSE is active
 * @param string $msg
 * @param boolean $error
 */
function writeLog$msg$error false ) {

// add current time and linebreak to message
$fileMsg date( &#39;Y-m-d H:i:s: &#39;) . trim($msg) . "\n";

// switch between normal or error log
$log = ($error) ? $GLOBALS[&#39;f_err&#39;] : $GLOBALS[&#39;f_log&#39;];

if ( !empty( $log ) ) {
// write message to log
fwrite($log$fileMsg);
}

if ( $GLOBALS[&#39;VERBOSE&#39;] ) {
// output to screen
echo $msg "\n";
flush();
}
// function

/**
 * Checks the $error and writes output to normal and error log.
 * If critical flag is set, execution will be terminated immediately
 * on error.
 * @param boolean $error
 * @param string $msg
 * @param boolean $critical
 */
function error$error$msg$critical false ) {

if ( $error ) {
// write error to both log files
writeLog$msg );
writeLog$msgtrue );

// terminate script if this error is critical
if ( $critical ) {
die( $msg );
}

$GLOBALS[&#39;error&#39;] = true;
}
// function



################################
# main
################################

// set header to text/plain in order to see result correctly in a browser
header( &#39;Content-Type: text/plain; charset="UTF-8"&#39; );
header( &#39;Content-disposition: inline&#39; );

// set execution time limit
if( ini_get( &#39;max_execution_time&#39; ) < $MAX_EXECUTION_TIME ) {
set_time_limit$MAX_EXECUTION_TIME );
}

// initialize error control
$error false;

// guess and set host operating system
if( strtoupper(substr(PHP_OS03)) !== &#39;WIN&#39; ) {
$os = &#39;unix&#39;;
$backup_mime = &#39;application/x-tar&#39;;
$BACKUP_NAME .= &#39;.tar&#39;;
} else {
$os = &#39;windows&#39;;
$backup_mime = &#39;application/zip&#39;;
$BACKUP_NAME .= &#39;.zip&#39;;
}


// create directories if they do not exist
if( !is_dir$BACKUP_DEST ) ) {
$success mkdir$BACKUP_DEST );
error( !$success, &#39;Backup directory could not be created in &#39; . $BACKUP_DEST, true );
}
if( !
is_dir$BACKUP_TEMP ) ) {
$success mkdir$BACKUP_TEMP );
error( !$success, &#39;Backup temp directory could not be created in &#39; . $BACKUP_TEMP, true );
}

// prepare standard log file
$log_path $BACKUP_DEST . &#39;/&#39; . $LOG_FILE;
($f_log fopen($log_path, &#39;w&#39;)) || error( true, &#39;Cannot create log file: &#39; . $log_path, true );

// prepare error log file
$err_path $BACKUP_DEST . &#39;/&#39; . $ERR_FILE;
($f_err fopen($err_path, &#39;w&#39;)) || error( true, &#39;Cannot create error log file: &#39; . $err_path, true );

// Start logging
writeLog"Executing MySQL Backup Script v1.4" );
writeLog"Processing Databases.." );


################################
# DB dumps
################################
$excludes = array();
if( 
trim($EXCLUDE_DB) != &#39;&#39; ) {
$excludes array_map( &#39;trim&#39;, explode( &#39;,&#39;, $EXCLUDE_DB ) );
}

// Loop through databases
$db_conn = @mysql_connect$MYSQL_HOST$MYSQL_USER$MYSQL_PASSWD ) or errortruemysql_error(), true );
$db_result mysql_list_dbs($db_conn);
$db_auth " --host=\"$MYSQL_HOST\" --user=\"$MYSQL_USER\" --password=\"$MYSQL_PASSWD\"";
while (
$db_row mysql_fetch_object($db_result)) {
$db $db_row->Database;

if( in_array$db$excludes ) ) {
// excluded DB, go to next one
continue;
}

// dump db
unset( $output );
exec"$MYSQL_PATH/mysqldump $db_auth --opt $db 2>&1 >$BACKUP_TEMP/$db.sql"$output$res);
if( $res ) {
errortrue"DUMP FAILED\n".implode"\n"$output) );
} else {
writeLog"Dumped DB: " $db );

if( $OPTIMIZE ) {
unset( $output );
exec"$MYSQL_PATH/mysqlcheck $db_auth --optimize $db 2>&1"$output$res);
if( $res ) {
errortrue"OPTIMIZATION FAILED\n".implode"\n"$output) );
} else {
writeLog"Optimized DB: " $db );
}
// if
// if

// compress db
unset( $output );
if( $os == &#39;unix&#39; ) {
exec"$USE_NICE $COMPRESSOR $BACKUP_TEMP/$db.sql 2>&1" $output$res );
} else {
exec"zip -mj $BACKUP_TEMP/$db.sql.zip $BACKUP_TEMP/$db.sql 2>&1" $output$res );
}
if( $res ) {
errortrue"COMPRESSION FAILED\n".implode"\n"$output) );
} else {
writeLog"Compressed DB: " $db );
}

if( $FLUSH ) {
unset( $output );
exec("$MYSQL_PATH/mysqladmin $db_auth flush-tables 2>&1"$output$res );
if( $res ) {
errortrue"Flushing tables failed\n".implode"\n"$output) );
} else {
writeLog"Flushed Tables" );
}
// if

// while

mysql_free_result($db_result);
mysql_close($db_conn);


################################
# Archiving
################################

// TAR the files
writeLog"Archiving files.. " );
chdir$BACKUP_TEMP );
unset( 
$output );
if( 
$os == &#39;unix&#39; ) {
exec("cd $BACKUP_TEMP ; $USE_NICE tar cf $BACKUP_DEST/$BACKUP_NAME * 2>&1"$output$res);
} else {
exec("zip -j -0 $BACKUP_DEST/$BACKUP_NAME * 2>&1"$output$res);
}
if ( 
$res ) {
errortrue"FAILED\n".implode"\n"$output) );
} else {
writeLog"Backup complete!" );
}

// first error check, so we can add a message to the backup email in case of error
if ( $error ) {
$msg "\n*** ERRORS DETECTED! ***";
if( $ERROR_EMAIL ) {
$msg .= "\nCheck your email account $ERROR_EMAIL for more information!\n\n";
} else {
$msg .= "\nCheck the error log {$err_path} for more information!\n\n";
}

writeLog$msg );
}


################################
# post processing
################################

// do we email the backup file?
if ($EMAIL_BACKUP) {
writeLog"Emailing backup to " $EMAIL_ADDR " .. " );

$headers "From: " $EMAIL_FROM " <root@localhost>";
// Generate a boundary string
$rnd_str md5(time());
$mime_boundary "==Multipart_Boundary_x{$rnd_str}x";

// Add headers for file attachment
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";

// Add a multipart boundary above the plain message
$body "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
file_get_contents($log_path) . "\n\n";

// make Base64 encoding for file data
$data chunk_split(base64_encode(file_get_contents($BACKUP_DEST.&#39;/&#39;.$BACKUP_NAME)));

// Add file attachment to the message
$body .= "--{$mime_boundary}\n" .
"Content-Type: {$backup_mime};\n" .
" name=\"{$BACKUP_NAME}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$BACKUP_NAME}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data "\n\n" .
"--{$mime_boundary}--\n";

$res mail$EMAIL_ADDR$EMAIL_SUBJECT$body$headers );
if ( !$res ) {
errortrue, &#39;FAILED to email mysql dumps.&#39; );
}
}


// do we delete the backup file?
if ( $DEL_AFTER && $EMAIL_BACKUP ) {
writeLog"Deleting file.. " );

if ( file_exists$BACKUP_DEST.&#39;/&#39;.$BACKUP_NAME ) ) {
$success unlink$BACKUP_DEST.&#39;/&#39;.$BACKUP_NAME );
error( !$success"FAILED\nUnable to delete backup file" );
}
}

// see if there were any errors to email
if ( ($ERROR_EMAIL) && ($error) ) {
writeLog"\nThere were errors!" );
writeLog"Emailing error log to " $ERROR_EMAIL " .. " );

$headers "From: " $EMAIL_FROM " <root@localhost>";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\";\n";
$body "\n".file_get_contents($err_path)."\n";

$res mail$ERROR_EMAIL$ERROR_SUBJECT$body$headers );
if( !$res ) {
errortrue, &#39;FAILED to email error log.&#39; );
}
}


################################
# cleanup / mr proper
################################

// close log files
fclose($f_log);
fclose($f_err);

// if error log is empty, delete it
if( !$error ) {
unlink$err_path );
}

// delete the log files if they have been emailed (and del_after is on)
if ( $DEL_AFTER && $EMAIL_BACKUP ) {
        if ( 
file_exists$log_path ) ) {
                
$success unlink$log_path );
                
error( !$success"FAILED\nUnable to delete log file: ".$log_path );
        }
        if ( 
file_exists$err_path ) ) {
                
$success unlink$err_path );
                
error( !$success"FAILED\nUnable to delete error log file: ".$err_path );
        }
}

// remove files in temp dir
if ($dir = @opendir($BACKUP_TEMP)) {
while (($file readdir($dir)) !== false) {
if (!is_dir($file)) {
unlink($BACKUP_TEMP.&#39;/&#39;.$file);
}
}
}
closedir($dir);

// remove temp dir
rmdir($BACKUP_TEMP);

?>

backup_dbs_config.php:
Kodi: [Zgjidh]
<?php

######################################################################
## MySQL Backup Script Configuration File
##
## Use this file to configure your settings for the script.
######################################################################
## For more documentation and new versions, please visit:
## http://www.dagondesign.com/articles/automatic-mysql-backup-script/
## -------------------------------------------------------------------
## Created by Dagon Design (www.dagondesign.com).
## Much credit goes to Oliver Mueller (oliver@teqneers.de)
## for contributing additional features, fixes, and testing.
######################################################################

######################################################################
## General Options
######################################################################

// Remember to always use absolute paths without trailing slashes!
// On Windows Systems: Don&#39;t forget volume character (e.g. C:).

// Path to the mysql commands (mysqldump, mysqladmin, etc..)
$MYSQL_PATH = &#39;/usr/bin&#39;;

// Mysql connection settings (must have root access to get all DBs)
$MYSQL_HOST = &#39;localhost&#39;;
$MYSQL_USER = &#39;root&#39;;
$MYSQL_PASSWD = &#39;password&#39;;

// Backup destination (will be created if not already existing)
$BACKUP_DEST = &#39;/db_backups&#39;;

// Temporary location (will be created if not already existing)
$BACKUP_TEMP = &#39;/tmp/backup_temp&#39;;

// Show script status on screen while processing
// (Does not effect log file creation)
$VERBOSE true;

// Name of the created backup file (you can use PHP&#39;s date function)
// Omit file suffixes like .tar or .zip (will be set automatically)
$BACKUP_NAME = &#39;mysql_backup_&#39; . date(&#39;Y-m-d&#39;);

// Name of the standard log file
$LOG_FILE $BACKUP_NAME . &#39;.log&#39;;

// Name of the error log file
$ERR_FILE $BACKUP_NAME . &#39;.err&#39;;

// Which compression program to use
// Only relevant on unix based systems. Windows system will use zip command.
$COMPRESSOR = &#39;bzip2&#39;;


######################################################################
## Email Options
######################################################################


// Email the backup file when finished?
$EMAIL_BACKUP false;

// If using email backup, delete from server afterwards?
$DEL_AFTER false;

// The backup email&#39;s &#39;FROM&#39; field
$EMAIL_FROM = &#39;Backup Script&#39;;

// The backup email&#39;s subject line
$EMAIL_SUBJECT = &#39;SQL Backup for &#39; . date(&#39;Y-m-d&#39;) . &#39; at &#39; . date(&#39;H:i&#39;);

// The destination address for the backup email
$EMAIL_ADDR = &#39;user@domain.com&#39;;


######################################################################
## Error Options
######################################################################

// Email error log to specified email address
// (Will only send if an email address is given)
$ERROR_EMAIL $EMAIL_ADDR;

// Subject line for error email
$ERROR_SUBJECT = &#39;ERROR: &#39; . $EMAIL_SUBJECT;


######################################################################
## Advanced Options
## Be sure you know what you are doing before making changes here!
######################################################################
// A comma separated list of databases, which should be excluded
// from backup
// information_schema is a default exclude, because it is a read-only DB anyway
$EXCLUDE_DB = &#39;information_schema&#39;;

// Defines the maximum number of seconds this script shall run before terminating
// This may need to be adjusted depending on how large your DBs are
// Default: 18000
$MAX_EXECUTION_TIME 18000;

// Low CPU usage while compressing (recommended) (empty string to disable).
// Only relevant on unix based systems
// Default: &#39;nice -n 19&#39;
$USE_NICE = &#39;nice -n 19&#39;;

// Flush tables between mysqldumps (recommended, if it runs during non-peak time)
// Default: false
$FLUSH false;

// Optimize databases between mysqldumps.
// (For detailed information look at
// http://dev.mysql.com/doc/mysql/en/mysqlcheck.html)
// Default: false
$OPTIMIZE false;

######################################################################
## End of Options
######################################################################

?>

Sic mund ta shihni, duhet thjesht te ndryshoni filen e konfigurimit sipas kerkesave tuaja :). Per ta bere scriptin automatik duhet te beni nje cron-job, te tille:
Kodi: [Zgjidh]
/ramdisk/bin/php5 -q /home/user/direktoria_e_scriptit/backup_dbs.phpme frekuence sipas deshires :)

KUJDES!

-Databazat kane informacion vital per sitet tuaja, dhe ato nuk duhet te bien ne duar te gabuara!

-Mos e ndani me njeri adresen e emailit ku do te dergohen databazat dhe ruajeni ate me nje password te forte

-Scripti eshte relativisht intensiv, ndaj mos e vini shume shpesh cron-in. Mund te keni probleme me kompanine e hostimit nese e kryeni shume shpesh. Shkurt, perdoreni me karar ;)

-Mos e vini scriptin nen direktorine public_html!Kjo gje do te lejonte qe persona te trete te mund ta "ndiznin" ate dhe te provokojne nje backup me shume, dhe mund te perdoret si nje sulm dos.

Keto po me vijne ne mend per momentin  :)

Temat e fundit