Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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

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 drinking their drinks and smoking their pipes about the Monastery: (2)
As of 2020-10-27 04:02 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (256 votes). Check out past polls.