Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

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
  • Read db owners from a config file and automatically deliver backups to the appropriate ~user dir.
#! /usr/bin/perl -w

# 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";


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);

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


# - - - - - - - - - - - - - - - - -
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/$_");

Comment on MySQL backup
Download Code
Replies are listed 'Best First'.
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...


      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?

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2016-02-14 15:00 GMT
Find Nodes?
    Voting Booth?

    How many photographs, souvenirs, artworks, trophies or other decorative objects are displayed in your home?

    Results (470 votes), past polls