| 81 | 
           rodolico | 
           1 | 
           #! /usr/bin/env perl
  | 
        
        
            | 
            | 
           2 | 
              | 
        
        
            | 
            | 
           3 | 
           use strict;
  | 
        
        
            | 
            | 
           4 | 
           use warnings;
  | 
        
        
            | 
            | 
           5 | 
              | 
        
        
            | 
            | 
           6 | 
           my $clientBaseDirectory = '/var/www/clients/';
  | 
        
        
            | 
            | 
           7 | 
           my $clientDirectoryPrefix = 'client';
  | 
        
        
            | 
            | 
           8 | 
           my $dumpFileSuffix = 'dmp';
  | 
        
        
            | 
            | 
           9 | 
           my $archiveDirectory = '/var/www/archives/';
  | 
        
        
            | 
            | 
           10 | 
              | 
        
        
            | 
            | 
           11 | 
           my $client = shift;
  | 
        
        
            | 
            | 
           12 | 
           my $name = shift;
  | 
        
        
            | 
            | 
           13 | 
           my $rootPassword = shift;
  | 
        
        
            | 
            | 
           14 | 
              | 
        
        
            | 
            | 
           15 | 
           sub getLine {
  | 
        
        
            | 
            | 
           16 | 
              my $message = shift;
  | 
        
        
            | 
            | 
           17 | 
              print "$message: ";
  | 
        
        
            | 
            | 
           18 | 
              my $return = <>;
  | 
        
        
            | 
            | 
           19 | 
              chomp $return;
  | 
        
        
            | 
            | 
           20 | 
              return $return;
  | 
        
        
            | 
            | 
           21 | 
           }
  | 
        
        
            | 
            | 
           22 | 
              | 
        
        
            | 
            | 
           23 | 
           sub backupDatabases {
  | 
        
        
            | 
            | 
           24 | 
              my ( $client, $rootPassword, $targetDir ) = @_;
  | 
        
        
            | 
            | 
           25 | 
              print "mysqlshow -u root -p$rootPassword\n";
  | 
        
        
            | 
            | 
           26 | 
              my @databases = `mysqlshow -u root -p$rootPassword`;
  | 
        
        
            | 
            | 
           27 | 
              chomp @databases;
  | 
        
        
            | 
            | 
           28 | 
              foreach my $thisdb ( @databases ) {
  | 
        
        
            | 
            | 
           29 | 
                 next unless $thisdb =~ m/(c$client[a-z0-9_-]+)/;
  | 
        
        
            | 
            | 
           30 | 
                 my $db = $1;
  | 
        
        
            | 
            | 
           31 | 
                 print "Dumping database $db\n";
  | 
        
        
            | 
            | 
           32 | 
                 `mysqldump -u root -p$rootPassword $db > $targetDir/$db.$dumpFileSuffix`;
  | 
        
        
            | 
            | 
           33 | 
              }
  | 
        
        
            | 
            | 
           34 | 
              print `ls -ablph $targetDir/*.$dumpFileSuffix`;
  | 
        
        
            | 
            | 
           35 | 
           }
  | 
        
        
            | 
            | 
           36 | 
              | 
        
        
            | 
            | 
           37 | 
              | 
        
        
            | 
            | 
           38 | 
           $client = &getLine( "Enter the client Number" ) unless $client;
  | 
        
        
            | 
            | 
           39 | 
           $name = &getLine( "Enter an identifier for the output file" ) unless $name;
  | 
        
        
            | 
            | 
           40 | 
           $rootPassword = &getLine( "Enter the mysql password" ) unless $rootPassword;
  | 
        
        
            | 
            | 
           41 | 
           $rootPassword = "'$rootPassword'";
  | 
        
        
            | 
            | 
           42 | 
              | 
        
        
            | 
            | 
           43 | 
           $clientBaseDirectory .= "$clientDirectoryPrefix$client";
  | 
        
        
            | 
            | 
           44 | 
              | 
        
        
            | 
            | 
           45 | 
           `mkdir -p $archiveDirectory`;
  | 
        
        
            | 
            | 
           46 | 
           $archiveDirectory .= "$name\_$clientDirectoryPrefix$client.tar.xz";
  | 
        
        
            | 
            | 
           47 | 
              | 
        
        
            | 
            | 
           48 | 
           die "call with client and name\n$0 client_number nameOfFile\n" unless $client and $name;
  | 
        
        
            | 
            | 
           49 | 
           die "Client with number $client does not exist as $clientBaseDirectory\n" unless -d $clientBaseDirectory;
  | 
        
        
            | 
            | 
           50 | 
              | 
        
        
            | 
            | 
           51 | 
           &backupDatabases( $client, $rootPassword, $clientBaseDirectory );
  | 
        
        
            | 
            | 
           52 | 
              | 
        
        
            | 
            | 
           53 | 
           print "Creating archive, this may take a while\n";
  | 
        
        
            | 
            | 
           54 | 
           `tar -cvp $clientBaseDirectory | xz --stdout --threads=0 --memlimit=50% > $archiveDirectory`;
  | 
        
        
            | 
            | 
           55 | 
           print "cleaning up database dump files\n";
  | 
        
        
            | 
            | 
           56 | 
           `rm $clientBaseDirectory/*.$dumpFileSuffix`;
  | 
        
        
            | 
            | 
           57 | 
              | 
        
        
            | 
            | 
           58 | 
           print "Done, backup is now stored in $archiveDirectory\n";
  | 
        
        
            | 
            | 
           59 | 
           1;
  | 
        
        
            | 
            | 
           60 | 
              |