Beefy Boxes and Bandwidth Generously Provided by pair Networks BBQ
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

MySQL backup

by penguinfuz (Pilgrim)
on May 24, 2002 at 23:25 UTC ( #169226=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility Scripts
Author/Contact Info penguinfuz at wonderwaylabs dot com
Description: This script backs up each MySQL database into individual gzip'd files; Useful in shared environments where many users have their own MySQL databases and wish to have daily backups of their own data.

UPDATE: 17/07/2003
  • Now using bzip2 for better compression
  • Removed connect() subroutine
TODO
  • Read db owners from a config file and automatically deliver backups to the appropriate ~user dir.
#! /usr/bin/perl -w

# db-backup.pl
# Dump and gzip each MySQL database.

use strict;
use DBI;

my $dbhost  = "localhost";
my $dbuser  = "root";
my $dbpass  = "easyONE";
my $date    = "`date +%Y-%m-%d`";
my $path    = "/your/archive/db";
my $ext     = "bz2";

flush_old($path,$ext);
my($dbh,$sth,$query);

my $dsn = "DBI:mysql:host=$dbhost";
$dbh    = DBI->connect($dsn,$dbuser,$dbpass,{PrintError => 0, RaiseErr
+or => 1});
$query  = qq^SHOW DATABASES^;
$sth    = $dbh->prepare($query);
$sth->execute();

while(my $ref = $sth->fetchrow_array()) {
    my @bp = `mysqldump --user=$dbuser --password=$dbpass --add-drop-t
+able $ref | bzip2 -1 > $path/$ref.$date.$ext`;
}

$sth->finish();
$dbh->disconnect();

# - - - - - - - - - - - - - - - - -
sub flush_old {
   my ($path,$ext) = @_;
   opendir BP_DIR,"$path" or die "Cannot open $path: $!\n";
        my @old_backups = grep { /\.$ext$/ } readdir BP_DIR;
   closedir BP_DIR;

   for (@old_backups) {
        my @args = ("rm","-f","$path/$_");
        system(@args);
   }
}

Comment on MySQL backup
Download Code
Re: MySQL backup
by gav^ (Curate) on May 25, 2002 at 01:55 UTC
    Some points you may want to consider:
    • removing the redundant ( and ) in $query = (qq^SHOW DATABASES^)
    • using bound variables with bind_col and bind_columns
    • replacing grep { $_ =~ ".gz" } with  grep { /\.gz$/ } or being lazing and using <*.gz>
    • using File::Path to remove directories in a portable way
    Hope this helps...

    gav^

      Thanks for the input gav^

      ...removing the redundant ( and ) in $query = (qq^SHOW DATABASES^)
      Done, duhr! ;)

      ...replacing grep { $_ =~ ".gz" } with grep { /\.gz$/ } or being lazing and using <*.gz>
      Done. Since I am already defining the ".gz" extension in a variable, I can just pass that information to the "clean_up()" routine, cool.

      ...using bound variables with bind_col and bind_columns
      ...using File::Path to remove directories in a portable way
      ++ for giving me something new to learn about, cheers!

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://169226]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (20)
As of 2014-04-18 18:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (471 votes), past polls