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 > 0 ) { error( true, "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 > 0 ) { error( true, "OPTIMIZATION FAILED\n".implode( "\n", $output) ); } else { writeLog( "Optimized DB: " . $db ); } } // if } // if // compress db unset( $output ); if( $os == 'unix' ) { 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 > 0 ) { error( true, "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 > 0 ) { error( true, "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 == 'unix' ) { 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 > 0 ) { error( true, "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 . " "; // 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.'/'.$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 ) { error( true, 'FAILED to email mysql dumps.' ); } } // do we delete the backup file? if ( $DEL_AFTER && $EMAIL_BACKUP ) { writeLog( "Deleting file.. " ); if ( file_exists( $BACKUP_DEST.'/'.$BACKUP_NAME ) ) { $success = unlink( $BACKUP_DEST.'/'.$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 . " "; $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 ) { error( true, 'FAILED to email error log.' ); } } ################################ # 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.'/'.$file); } } } closedir($dir); // remove temp dir rmdir($BACKUP_TEMP); ?>