FTP backup script
=================

Here is an automated script for backing up an Elgg installation.

.. code:: perl

   #!/usr/bin/perl -w
   
   # FTP Backup
   
   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 = '/home/userx/public_html';
   $directory_to_backup2 = '/home/userx/elggdata';
   
   # ENTER THE PATH TO THE DIRECTORY YOU WISH TO SAVE THE BACKUP FILE TO, NO TRAILING SLASH
   $backup_dest_dir = '/home/userx/sitebackups';
   
   # 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 = 'userx_elgg';
   $dbpwd = 'dbpassword';
   $mysql_backup_file_elgg = "$backup_dest_dir/mysql_elgg-$day-$month-$year.sql.gz";
   
   # ENTER DATABASE NAME
   $database_names_elgg = 'userx_elgg';
   
   # FTP PARAMETERS
   $ftp_backup = 1;
   $ftp_host = "FTP HOSTNAME/IP";
   $ftp_user = "ftpuser";
   $ftp_pwd = "ftppassword";
   $ftp_dir = "/";
    
   # SYSTEM COMMANDS
   $cmd_mysqldump = '/usr/bin/mysqldump';
   $cmd_gzip = '/usr/bin/gzip';
   
   # 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 $directory_to_backup2";
   
   # elgg DATABASE BACKUP
   system($syscmd);
   $syscmd = "$cmd_mysqldump --host=$dbhost --user=$dbuser --password=$dbpwd --add-drop-table --databases $database_names_elgg -c -l | $cmd_gzip > $mysql_backup_file_elgg";
   
   system($syscmd);
 
   # CREATING FULL SITE BACKUP FILE
   $syscmd = "tar -czf $full_backup_file $mysql_backup_file_elgg $site_backup_file";
   system($syscmd);
   
   # DELETING SITE AND MYSQL BACKUP FILES
   unlink($mysql_backup_file_elgg);
   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);
   }
