Subversion Repositories sysadmin_scripts

Rev

Rev 81 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#! /usr/bin/env perl

use strict;
use warnings;

my $clientBaseDirectory = '/var/www/clients/';
my $clientDirectoryPrefix = 'client';
my $dumpFileSuffix = 'dmp';
my $archiveDirectory = '/var/www/archives/';

my $client = shift;
my $name = shift;
my $rootPassword = shift;

sub getLine {
   my $message = shift;
   print "$message: ";
   my $return = <>;
   chomp $return;
   return $return;
}

sub backupDatabases {
   my ( $client, $rootPassword, $targetDir ) = @_;
   print "mysqlshow -u root -p$rootPassword\n";
   my @databases = `mysqlshow -u root -p$rootPassword`;
   chomp @databases;
   foreach my $thisdb ( @databases ) {
      next unless $thisdb =~ m/(c$client[a-z0-9_-]+)/;
      my $db = $1;
      print "Dumping database $db\n";
      `mysqldump -u root -p$rootPassword $db > $targetDir/$db.$dumpFileSuffix`;
   }
   print `ls -ablph $targetDir/*.$dumpFileSuffix`;
}


$client = &getLine( "Enter the client Number" ) unless $client;
$name = &getLine( "Enter an identifier for the output file" ) unless $name;
$rootPassword = &getLine( "Enter the mysql password" ) unless $rootPassword;
$rootPassword = "'$rootPassword'";

$clientBaseDirectory .= "$clientDirectoryPrefix$client";

`mkdir -p $archiveDirectory`;
$archiveDirectory .= "$name\_$clientDirectoryPrefix$client.tar.xz";

die "call with client and name\n$0 client_number nameOfFile\n" unless $client and $name;
die "Client with number $client does not exist as $clientBaseDirectory\n" unless -d $clientBaseDirectory;

&backupDatabases( $client, $rootPassword, $clientBaseDirectory );

print "Creating archive, this may take a while\n";
`tar -cvp $clientBaseDirectory | xz --stdout --threads=0 --memlimit=50% > $archiveDirectory`;
print "cleaning up database dump files\n";
`rm $clientBaseDirectory/*.$dumpFileSuffix`;

print "Done, backup is now stored in $archiveDirectory\n";
1;