summaryrefslogtreecommitdiff
path: root/byteback-mysql/scripts.d/Bytemyback/mysqldump-split-db
blob: b484ef670e3ea88782edfde262a75eed53a2b02b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use warnings;
use strict;
use Sys::Hostname;

if ((!@ARGV) or ($ARGV[0] ne 'pre')) {
    exit;
}

# Quick mysqldump wrapper to dump individual databases and alert if it fails at all
my $failed = 0;  # only set to 0 once
my $failed_databases = '';
my $backup_directory = '/var/backups/byteback/mysqldump-split-db/';
`mkdir -p $backup_directory`;

my @databases = `echo "SHOW DATABASES" | mysql --defaults-file=/etc/mysql/debian.cnf`;
shift @databases;    # Get rid of 'Databases' title from the top
foreach my $database (@databases) {
    chomp($database);
    next if $database eq "lost+found";
    next if $database =~ /^#mysql..#lost\+found$/;
    next if $database =~ /^information_schema$/;
    next if $database =~ /^performance_schema$/;
    next if $database =~ /^events$/;
    next if $database =~ /^cond_instances$/;
    print "Dumping $database\n";
    # Need to get rid of this -f once we've fixed errors with views (access denied etc.)
    my $gzip = -x '/usr/bin/pigz' ? '/usr/bin/pigz' : 'gzip';
    my $error_code = system("mysqldump --defaults-file=/etc/mysql/debian.cnf --events -f $database | $gzip > ${backup_directory}/${database}.sql.gz\n");
    if ($error_code) {
        $failed++;
        $failed_databases .= " $database";
    }
}

my $host = hostname;
if ($failed) {
     $host = hostname;
     system("mauvesend -i mysqldump-${host}-low -r now -s 'mysqldump on ${host} failed for $failed_databases' --detail='Please try running them manually to see what the problem was, and check the mailing list'");
}
else {
     system("mauvesend -i mysqldump-${host}-low -c now -s 'mysqldump on ${host} failed for $failed_databases' --detail='Please try running them manually to see what the problem was, and check the mailing list'");
}