/var/log/sbackup
/home/backups
-
SomeDatabase
SomeUser
password
-
/home/globalherald
####
#!/usr/bin/perl
# sbackup.pl: Backing up the server. Looks for a file
# called sbackup.xml in /etc which specifies, which databases
# and which directories to back up.
#
# TODO:
# Add tar/database dump logs to logs
# Add postgresql dumper
# Add tar/database dump options to XML
use strict;
use warnings;
use XML::Simple;
use IO::File;
use vars qw($XMLConfig $logprefix $fh);
sub LogMsg
{
my $consecho = 1;
my $deadly = shift;
my $message = shift;
my $timestamp = localtime(time);
open LogFile, ">>$logprefix/sbackup.log" || die "Can't open logfile!";
print LogFile "$timestamp: $message\n";
if ($consecho == 1)
{
print "$timestamp: $message\n";
}
return;
}
sub ParseConfig
{
$fh = new IO::File('/etc/sbackup.xml') or LogMsg(1, "Can't open sbackup.xml!");
$XMLConfig = XMLin($fh);
return;
}
sub BackupMysqlDatabase
{
my $item = shift;
my $dbname = shift;
my $dbuser = shift;
my $dbpass = shift;
my $command = "mysqldump --quick --add-locks --add-drop-table -a -e -F -K -u $dbuser -p $dbpass $dbname";
#my $result = system($command);
print $command;
my $result = 0;
if ($result == 0)
{
LogMsg(0, "Backup of $item, database $dbname successful!");
}
else
{
LogMsg(0, "Backup of $item, database $item failed!");
}
return;
}
sub BackupFS
{
my $item = shift;
my $frompath = shift;
my $storage = shift;
my $command = "tar cf $storage/$item.tar $frompath";
#my $result = system($command);
print $command;
my $result = 0;
if ($result == 0)
{
LogMsg(0, "Backup of $item, pathname $frompath successful!");
}
else
{
LogMsg(0, "Backup of $item, pathname $frompath failed!");
}
return;
}
my $localstorage;
my %currentFS = ("item", "", "source", "") ;
my %currentDB = ("item", "", "dbname", "", "dbuser", "", "dbpass", "");
my $currentitem;
ParseConfig();
foreach my $element ($XMLConfig)
{
print "The element is $element!\n";
my %somehash = {$element};
my @hashkeys = keys %somehash;
print "Keys are: @hashkeys\n";
if ($element eq "Logprefix")
{
$logprefix = $XMLConfig->logprefix;
}
if ($element eq "Storage")
{
$localstorage = $XMLConfig->storage;
}
if ($element eq "Item")
{
if ($element->{type} eq "MySQLDB")
{
foreach my $element2 ($element)
{
if ($element2 eq "DbName")
{
$currentDB{item} = $element->{item};
$currentDB{dbname} = $element2->{DbName};
}
if ($element2 eq "DbUser")
{
$currentDB{dbuser} = $element2->{DbUser};
}
if ($element2 eq "DbPass")
{
$currentDB{dbpass} = $element2->{DbPass};
}
}
BackupMySQLDatabase($currentDB{item}, $currentDB{dbname}, $currentDB{dbuser}, $currentDB{dbpass});
}
if ($element->{type} eq "Filesystem")
{
foreach my $element2 ($element)
{
if ($element2 eq "Path")
{
$currentFS{item} = $element->{Item};
$currentFS{path} = $element2->{Path};
}
}
BackupFS($currentFS{item}, $currentFS{path}, $localstorage);
}
}
}
close ($fh);