#!/usr/bin/perl -w # 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 $homedir = '/home/userdirectory/public_html'; # ENTER THE PATH TO THE LOCAL DIRECTORY YOU WISH TO SAVE THE BACKUP FILE TO, NO TRAILING SLASH # LOCAL BACKUP DIRECTORY MUST BE OUTSIDE THE HOME DIRECTORY $backup_dest_dir = '/home'; # FTP PARAMETERS $ftp_backup = 1; $ftp_host = "ftp_host"; $ftp_port = 21; # FTP (default 21) OR SFTP (default 22) PORT $ftp_user = "ftp_user"; $ftp_pwd = "ftp_password"; $ftp_dir = "/ftpdirectory/backup"; $ftp_debug = 0; # BACKUP FILE NAME OPTIONS ($a,$d,$d,$day,$month,$yearoffset,$r,$u,$o) = localtime(); $year = 1900 + $yearoffset; $month++; $homedir_archive = "homedir_backup-$day-$month-$year.tar.gz"; $full_backup_file = "full_site_backup-$day-$month-$year.tar.gz"; # MYSQL BACKUP PARAMETERS $dbhost = 'localhost'; $dbuser = 'db_user'; $dbpwd = 'passworddb'; $mysql_backup_file = "mysql_databases-$day-$month-$year.sql.gz"; $backup_all_databases = 'no'; # IF SET TO NO, SPECIFY INDIVIDUAL DATABASE NAME(S) BELOW # ENTER DATABASE NAMES TO BACKUP SEPARATED BY SPACES $database_names = 'mysql_db1 mysql_db2'; # SYSTEM COMMANDS $cmd_mysqldump = '/usr/local/apps/mysql/bin/mysqldump'; $cmd_gzip = '/usr/bin/gzip'; if(!-d $homedir) { die "Invalid path name (directory_to_backup): $homedir"; } if(!-d $backup_dest_dir) { print "\nCreating local backup directory: $backup_dest_dir\n"; mkdir $backup_dest_dir or die "Error creating local backup directory (backup_dest_dir): $backup_dest_dir "; } ($a,$d,$d,$day,$month,$yearoffset,$r,$u,$o) = localtime(); $year = 1900 + $yearoffset; print "\nArchiving home directory ($homedir)\n"; $syscmd = "tar cvzf $backup_dest_dir/$homedir_archive $homedir"; system($syscmd); if($backup_all_databases eq 'yes') { print "\nCreating SQL dump of all databases"; $syscmd = "$cmd_mysqldump --host=$dbhost --user=$dbuser --password=$dbpwd --add-drop-table --all-databases -c -l | $cmd_gzip > $backup_dest_dir/$mysql_backup_file"; } elsif(!$database_names eq "") { $syscmd = "$cmd_mysqldump --host=$dbhost --user=$dbuser --password=$dbpwd --add-drop-table --databases $database_names -c -l | $cmd_gzip > $backup_dest_dir/$mysql_backup_file"; } system($syscmd); print "\nCreating full backup archive\n"; if(-e "$backup_dest_dir/$mysql_backup_file") { $syscmd = "tar -czf $backup_dest_dir/$full_backup_file -C $backup_dest_dir $homedir_archive $mysql_backup_file"; } else { $syscmd = "tar -C $backup_dest_dir -cvzf $backup_dest_dir/$full_backup_file $homedir_archive"; } system($syscmd); if(-e "$backup_dest_dir/$mysql_backup_file") { unlink("$backup_dest_dir/$mysql_backup_file"); } unlink("$backup_dest_dir/$homedir_archive"); if($ftp_backup == 1) { use Net::FTP; print "\nUploading backup to remote server using FTP\n"; my $ftp = Net::FTP->new($ftp_host, Debug => $ftp_debug, port => $ftp_port) 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("$backup_dest_dir/$full_backup_file") or warn "Upload failed ", $ftp->message; $ftp->quit(); print "\nUpload completed\n"; } if($delete_backup == 1) { print "\nDeleting local backup archive\n"; unlink("$backup_dest_dir/$full_backup_file"); } print "\n";