[packages/bacula-backup-mysql/new_home] up to 0.6 (new home in github)
draenog
draenog at pld-linux.org
Wed Aug 15 12:11:26 CEST 2012
commit be66e5c6fbf1289062e8cd3afadf2f3fd11b1ae4
Author: Elan Ruusamäe <glen at delfi.ee>
Date: Wed Aug 15 11:09:33 2012 +0100
up to 0.6 (new home in github)
bacula-backup-mysql | 295 -----------------------------------------------
bacula-backup-mysql.conf | 45 --------
bacula-backup-mysql.spec | 20 ++--
3 files changed, 10 insertions(+), 350 deletions(-)
---
diff --git a/bacula-backup-mysql.spec b/bacula-backup-mysql.spec
index 0031541..fb8e1c0 100644
--- a/bacula-backup-mysql.spec
+++ b/bacula-backup-mysql.spec
@@ -1,12 +1,13 @@
%include /usr/lib/rpm/macros.perl
Summary: MySQL backup hook for Bacula
Name: bacula-backup-mysql
-Version: 0.5
-Release: 1
+Version: 0.6
+Release: 0.1
License: GPL v2
Group: Applications/Databases
-Source0: %{name}
-Source1: %{name}.conf
+URL: https://github.com/glensc/bacula-backup-mysql
+Source0: https://github.com/glensc/bacula-backup-mysql/tarball/master/%{name}-%{version}.tgz
+# Source0-md5: e4ff4b3c05a6641ebb2bf97da9e83099
BuildRequires: perl-tools-pod
BuildRequires: rpm-perlprov >= 4.1-13
Requires: /usr/bin/mysqlhotcopy
@@ -24,18 +25,17 @@ computers.
This package contains MySQL backup hook.
%prep
-%setup -qcT
-cp -a %{SOURCE0} .
-cp -a %{SOURCE1} .
+%setup -qc
+mv *-%{name}-*/* .
%build
-pod2man bacula-backup-mysql -o bacula-backup-mysql.1
+pod2man README.pod -o bacula-backup-mysql.1
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{_sbindir},%{_sysconfdir},%{_mandir}/man1}
-install -p %{name} $RPM_BUILD_ROOT%{_sbindir}
-cp -p %{name}.conf $RPM_BUILD_ROOT%{_sysconfdir}/backup-mysql.conf
+install -p %{name}.pl $RPM_BUILD_ROOT%{_sbindir}/%{name}
+cp -p backup-mysql.conf $RPM_BUILD_ROOT%{_sysconfdir}
cp -p bacula-backup-mysql.1 $RPM_BUILD_ROOT%{_mandir}/man1
%clean
diff --git a/bacula-backup-mysql b/bacula-backup-mysql
deleted file mode 100644
index b44786c..0000000
--- a/bacula-backup-mysql
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/usr/bin/perl -ws
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to:
-#
-# Free Software Foundation, Inc.
-# 59 Temple Place - Suite 330
-# Boston, MA 02111-1307, USA.
-
-# Rudimentary switch parsing. Must be in main package.
-our $cleanup;
-
-package BBM;
-use strict;
-use POSIX qw(setuid setgid);
-use DBI;
-use File::Temp qw(tempdir);
-use File::Path qw(rmtree);
-
-# path to Apache HTTPd-style config
-my $config = '/etc/bacula/backup-mysql.conf';
-my $c = new BBM::Config($config);
-
-# now change to user mysql after we've read config
-unless ($<) {
- my $uid = getpwnam('mysql');
- my $gid = getgrnam('mysql');
- die "Can't find user/group mysql\n" unless $uid or $gid;
-
- # CWD could not be accessible for mysql user
- chdir("/");
-
- $) = "$gid $gid";
- $( = $gid;
- $> = $< = $uid;
-}
-
-# setup tmpdir
-my $backup_dir = $c->get('options', 'outdir') or die "'outdir' not defined in config\n";
-my $tmpdir = $c->get('options', 'tmpdir') or die "'tmpdir' not defined in config\n";
-
-if (!-d $backup_dir && !mkdir($backup_dir) && !-d $backup_dir) {
- die "backup dir '$backup_dir' not present and can't be created\n";
-}
-if (!-d $tmpdir && !mkdir($tmpdir) && !-d $tmpdir) {
- die "tmpdir '$tmpdir' not present and can't be created\n";
-}
-
-# process each cluster
-for my $cluster ($c->get('clusters', 'cluster')) {
- print ">>> cluster: $cluster\n";
- if ($cleanup) {
- cleanup_cluster($cluster);
- } else {
- backup_cluster($cluster);
- }
- print "<<< end cluster: $cluster\n";
-}
-
-#
-# Usage: mysqlhotcopy $CLUSTER $DATABASE $USERNAME $PASSWORD $SOCKET
-#
-sub mysqlhotcopy {
- my ($cluster, $db, $user, $password, $socket) = @_;
-
- # strip $database to contain only db name, as the rest of the code assumes $database is just database name
- # i.e: include_database teensForum5./~(phorum_forums|phorum_users)/
- my ($database) = $db =~ /^([^\.]+)/;
-
- my $dstdir = tempdir("bbm.XXXXXX", DIR => $tmpdir);
-
- # remove output dir before backup,
- # otherwise the disk space requirement would double
- my $dirname = "$backup_dir/$cluster/$database";
- if (-d $dirname) {
- print ">>>> rmtree $dirname\n";
- rmtree($dirname);
- }
-
- # make backup with mysqlhotcopy
- my @shell = ('mysqlhotcopy');
- push(@shell, '-u', $user) if $user;
- push(@shell, '-p', $password) if $password;
- push(@shell, '-S', $socket) if $socket;
- push(@shell, $db, $dstdir);
- print ">>>> mysqlhotcopy $database\n";
- system(@shell) == 0 or die "mysqlhotcopy failed: $?\n";
-
- # put it to "production dir"
- my $cluster_dir = "$backup_dir/$cluster";
- if (!-d $cluster_dir && !mkdir($cluster_dir) && !-d $cluster_dir) {
- rmtree($dstdir);
- die "cluster dir '$cluster_dir' not present and can't be created\n";
- }
-
- my $srcdir = "$dstdir/$database";
- unless (rename($srcdir, $dirname)) {
- my $err = $!;
- rmtree($dstdir);
- die "Rename '$srcdir'->'$dirname' failed: $err\n";
- }
-
- rmdir($dstdir) or warn $!;
-
- print "<<<< mysqlhotcopy $database\n";
-}
-
-sub cleanup_cluster {
- my ($cluster) = @_;
- my $cluster_dir = "$backup_dir/$cluster";
- print ">>>> cleanup $cluster_dir\n";
- rmtree($cluster_dir);
- print "<<<< cleanup $cluster_dir\n";
-}
-
-sub backup_cluster {
- my ($cluster) = @_;
-
- # get db connection info
- my $user = $c->get($cluster, 'user') || $c->get('client', 'user');
- my $password = $c->get($cluster, 'password') || $c->get('client', 'password');
- my $socket = $c->get($cluster, 'socket') || $c->get('client', 'socket');
-
- # get databases to backup
- my @include = $c->get($cluster, 'include_database');
- my @exclude = $c->get($cluster, 'exclude_database');
-
- # start with include list
- my %dbs = map { $_ => 1 } @include;
-
- if (@exclude or !@include) {
- my $dbh = new BBM::DB($user, $password, $socket);
- my $sth = $dbh->prepare("show databases");
- $sth->execute();
- while (my($dbname) = $sth->fetchrow_array) {
- next if lc($dbname) eq 'information_schema';
- next if lc($dbname) eq 'performance_schema';
- $dbs{$dbname} = 1;
- }
- undef $dbh;
- }
-
- # remove excluded databases
- delete @dbs{@exclude};
-
- # now do the backup
- foreach my $db (keys %dbs) {
- mysqlhotcopy($cluster, $db, $user, $password, $socket);
- }
-}
-
-package BBM::DB;
-use strict;
-
-# DB class for simple Database connection
-sub new {
- my $self = shift;
- my ($user, $password, $socket) = @_;
- my $dsn = '';
- $dsn .= "mysql_socket=$socket" if $socket;
- my $dbh = DBI->connect("DBI:mysql:$dsn", $user, $password, { PrintError => 0, RaiseError => 1 });
- return $dbh;
-}
-
-package BBM::Config;
-use strict;
-use Config::General;
-
-sub new {
- my $self = shift;
- my $class = ref($self) || $self;
- my $file = shift;
-
- my $config = new Config::General(-ConfigFile => $file, -LowerCaseNames => 1);
- my $this = { $config->getall() };
- bless($this, $class);
-}
-
-sub get {
- my ($self, $section, $key) = @_;
- my $h = $self;
-
- # descend to [cluster] if $section not present in root tree
- unless (exists $h->{$section}) {
- $h = $h->{cluster};
- }
-
- # pay attention if callee wanted arrays
- return wantarray ? () : undef unless exists $h->{$section};
- return wantarray ? () : undef unless exists $h->{$section}->{$key};
-
- # deref if wanted array and is arrayref
- return @{$h->{$section}->{$key}} if wantarray && ref $h->{$section}->{$key} eq 'ARRAY';
-
- return $h->{$section}->{$key};
-}
-
-
-__END__
-
-=head1 NAME
-
-bacula-backup-mysql - A hook for Bacula to backup mysql databases using mysqlhotcopy.
-
-=head1 SYNOPSIS
-
- Job {
- Name = "example.org-mysql"
- ...
- # This prepares the backup
- Client Run Before Job = "/usr/sbin/bacula-backup-mysql"
- # This deletes the copy of the catalog
- Client Run After Job = "/usr/sbin/bacula-backup-mysql -cleanup"
- }
-
-=head1 DESCRIPTION
-
-This is a script to be setup as C<Client Run Before Job> in Bacula.
-
-=head1 CONFIGURATION
-
-Config starts with C<E<lt>clustersE<gt>> block, which you can define several
-database instances to be backed up.
-
-Each C<cluster> should define connection dsn and tables to be backed up.
-
-To define connection dsn, you can also define common options in
-C<E<lt>clientE<gt>> section, those options would be shared for each cluster
-which has not overriden the specific option.
-
-In C<E<lt>clusterE<gt>> sections, you should list databases to be backed up.
-You can use C<include_database> option to implicitly list which databases to be
-backed up. If you omit C<include_database> option, all databases are backed up
-which can be seen with C<show tables> query. To exclude databases from that
-list you can use C<exclude_database> options.
-
-Additionally C<include_database> supports table regexp, which is passed
-directly to mysqlhotcopy(1). This allows you to include or exclude tables from
-each database backup.
-
-=head1 EXAMPLE CONFIGURATION
-
- # clusters to backup
- # there is nothing special about name "mysql", name just picked as convience
- <clusters>
- cluster mysql
- cluster eventum
- cluster forums
- </clusters>
-
- # client connection parameters, can be overriden per cluster
- <client>
- user mysql
- password secret
- </client>
-
- # global options, can be overriden per cluster
- <options>
- tmpdir /srv/bacula/tmp
- outdir /srv/bacula/mysql
- </options>
-
- # mysql cluster: backup all but mysql database
- <cluster mysql>
- socket /var/lib/mysql/mysql.sock
- exclude_database mysql
- </cluster>
-
- # forums cluster: exclude phorum_forums and phorum_users tables
- <cluster forums>
- user mysql
- socket /var/lib/mysql/mysql.sock
-
- # include_database can also support table regexp for mysqlhotcopy:
- include_database teensForum5./~(phorum_forums|phorum_users)/
- </cluster>
-
-=head1 AUTHOR
-
-Copyright (C) 2009-2012, Elan RuusamE<auml>e <glen at delfi.ee>
-
-=head1 SEE ALSO
-
-http://www.bacula.org/
-
-=cut
diff --git a/bacula-backup-mysql.conf b/bacula-backup-mysql.conf
deleted file mode 100644
index 6351f98..0000000
--- a/bacula-backup-mysql.conf
+++ /dev/null
@@ -1,45 +0,0 @@
-# vim:ft=apachestyle
-
-# clusters to backup
-# there is nothing special about name "mysql", name just picked as convience
-<clusters>
- cluster mysql
-# cluster won2
-# cluster eventum
-</clusters>
-
-# client connection parameters, can be overriden per cluster
-<client>
- user mysql
-# password
-</client>
-
-# global options, can be overriden per cluster
-<options>
- tmpdir /srv/bacula/tmp
- outdir /srv/bacula/mysql
-</options>
-
-# options for mysql cluster
-<cluster mysql>
- socket /var/lib/mysql/mysql.sock
-# exclude_database mysql
-# include_database mysql
-</cluster>
-
-# options for "won2" cluster
-<cluster won2>
- user mysql
- password
- socket /var/lib/mysql/mysql.sock
-
- # exclude database has only effect if no include_database is selected
- exclude_database won2backup
- exclude_database test
-
- include_database won2_ui
- include_database delfi_watson2
-
- # include_database can also support table regexp for mysqlhotcopy:
- include_database teensForum5./~(phorum_forums|phorum_users)/
-</cluster>
More information about the pld-cvs-commit
mailing list