#!/usr/bin/perl -w # SIMPLE FTP BACKUP SCRIPT V0.9c # COPYRIGHT 2009 - THEWEBHOSTINGHERO.COM # http://www.thewebhostinghero.com use Net::FTP; # DELETE BACKUP AFTER FTP UPLOAD (0 = no, 1 = yes) $delete_backup = 1; # ENTER THE PATH TO THE DIRECTORY YOU WANT TO BACKUP, NO TRAILING SLASH $directory_to_backup = '/path/to/your/site'; # ENTER THE PATH TO THE DIRECTORY YOU WISH TO SAVE THE BACKUP FILE TO, NO TRAILING SLASH $backup_dest_dir = '/path/to/backup/directory'; # BACKUP FILE NAME OPTIONS ($a,$d,$d,$day,$month,$yearoffset,$r,$u,$o) = localtime(); $year = 1900 + $yearoffset; $site_backup_file = "$backup_dest_dir/site_backup-$day-$month-$year.tar.gz"; $full_backup_file = "$backup_dest_dir/full_site_backup-$day-$month-$year.tar.gz"; # MYSQL BACKUP PARAMETERS $dbhost = 'localhost'; $dbuser = 'username'; $dbpwd = 'password'; $mysql_backup_file = "$backup_dest_dir/mysql_databases-$day-$month-$year.sql.gz"; $backup_all_databases = 'no'; # ENTER DATABASE NAMES TO BACKUP SEPARATED BY SPACES * MUST SET backup_all_databases to 'no' * $database_names = 'db1 db2 db3'; # FTP PARAMETERS $ftp_backup = 0; $ftp_host = "my-ftp-server.com"; $ftp_user = "user"; $ftp_pwd = "password"; $ftp_dir = "/remote_backups"; # SYSTEM COMMANDS $cmd_mysqldump = '/usr/bin/mysqldump'; $cmd_gzip = '/usr/bin/gzip'; # ----- DO NOT EDIT BELOW THIS LINE ----- # CURRENT DATE / TIME ($a,$d,$d,$day,$month,$yearoffset,$r,$u,$o) = localtime(); $year = 1900 + $yearoffset; # BACKUP FILES $syscmd = "tar --exclude $backup_dest_dir" . "/* -czf $site_backup_file $directory_to_backup"; system($syscmd); # MYSQL DATABASE BACKUP if($backup_all_databases eq 'yes') { $syscmd = "$cmd_mysqldump --host=$dbhost --user=$dbuser --password=$dbpwd --add-drop-table --all-databases -c -l --result-file=$mysql_backup_file"; } else { $syscmd = "$cmd_mysqldump --host=$dbhost --user=$dbuser --password=$dbpwd --add-drop-table --databases $database_names -c -l | $cmd_gzip > $mysql_backup_file"; } system($syscmd); # CREATING FULL SITE BACKUP FILE $syscmd = "tar -czf $full_backup_file $mysql_backup_file $site_backup_file"; system($syscmd); # DELETING SITE AND MYSQL BACKUP FILES unlink($mysql_backup_file); unlink($site_backup_file); # UPLOADING FULL SITE BACKUP TO REMOTE FTP SERVER if($ftp_backup == 1) { my $ftp = Net::FTP->new($ftp_host, Debug => 0) or die "Cannot connect to server: $@"; $ftp->login($ftp_user, $ftp_pwd) or die "Cannot login ", $ftp->message; $ftp->cwd($ftp_dir) or die "Can't CWD to remote FTP directory ", $ftp->message; $ftp->binary(); $ftp->put($full_backup_file) or warn "Upload failed ", $ftp->message; $ftp->quit(); } # DELETING FULL SITE BACKUP if($delete_backup = 1) { unlink($full_backup_file); }