This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
snapshot_backup [2011/09/20 20:44] k2patel [C0D3s] |
snapshot_backup [2011/09/23 15:14] k2patel [bash config] |
||
---|---|---|---|
Line 32: | Line 32: | ||
</code> | </code> | ||
- | === db.pl === | + | ==== bash config ==== |
+ | <code bash | config_bash> | ||
+ | # this file contain what need to be backup. | ||
+ | # Follow the format of value | ||
+ | # instance<serial number must be unique> = <Volume ID> <Retention Freq.> <total Retention> | ||
+ | |||
+ | #instance1="vol-2222pqrs 7 2" | ||
+ | #instance2="vol-1111abcd 1 1" | ||
+ | </code> | ||
+ | |||
+ | ==== db.pl ==== | ||
<code perl | db.pl > | <code perl | db.pl > | ||
Line 49: | Line 59: | ||
print "Creating Database..."; | print "Creating Database..."; | ||
$dbh = DBI->connect( "dbi:SQLite:machine.db" ) || die "Cannot connect: $DBI::errstr"; | $dbh = DBI->connect( "dbi:SQLite:machine.db" ) || die "Cannot connect: $DBI::errstr"; | ||
- | $dbh->do( "CREATE TABLE TVR1 ( v_ID, s_ID, Dte )" ); | + | $dbh->do( "CREATE TABLE DESK ( v_ID, s_ID, Dte )" ); |
$dbh->disconnect; | $dbh->disconnect; | ||
} | } | ||
Line 70: | Line 80: | ||
exit 1; | exit 1; | ||
}else{ | }else{ | ||
- | $dbh->do( "INSERT INTO TVR1 VALUES ( '$ARGV[1]', '$ARGV[2]', '$ARGV[3]' )" ); | + | $dbh->do( "INSERT INTO DESK VALUES ( '$ARGV[1]', '$ARGV[2]', '$ARGV[3]' )" ); |
} | } | ||
} | } | ||
Line 78: | Line 88: | ||
exit 1; | exit 1; | ||
}else{ | }else{ | ||
- | $dbh->do( "DELETE FROM TVR1 WHERE s_ID = '$ARGV[2]' AND Dte = '$ARGV[3]'" ); | + | $dbh->do( "DELETE FROM DESK WHERE s_ID = '$ARGV[2]' AND Dte = '$ARGV[3]'" ); |
} | } | ||
} | } | ||
case "get" { | case "get" { | ||
- | $res = $dbh->selectall_arrayref( "SELECT s_ID, Dte FROM TVR1 WHERE v_ID = '$ARGV[1]' AND Dte = '$ARGV[2]'" ); | + | $res = $dbh->selectall_arrayref( "SELECT s_ID, Dte FROM DESK WHERE v_ID = '$ARGV[1]' AND Dte = '$ARGV[2]'" ); |
foreach( @$res ) { | foreach( @$res ) { | ||
#print "$_->[0] $_->[1] $_->[2]\n"; | #print "$_->[0] $_->[1] $_->[2]\n"; | ||
Line 90: | Line 100: | ||
else | else | ||
{ | { | ||
- | $res = $dbh->selectall_arrayref( "SELECT * FROM TVR1" ); | + | $res = $dbh->selectall_arrayref( "SELECT * FROM DESK" ); |
foreach( @$res ) { | foreach( @$res ) { | ||
print "$_->[0] $_->[1] $_->[2]\n"; | print "$_->[0] $_->[1] $_->[2]\n"; | ||
Line 97: | Line 107: | ||
} | } | ||
$dbh->disconnect; | $dbh->disconnect; | ||
+ | </code> | ||
+ | |||
+ | ==== backup.sh ==== | ||
+ | |||
+ | <code bash | backup.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # developed by k2patel | ||
+ | # k2patel@hotmail.com | ||
+ | |||
+ | ############# Read ME ############### | ||
+ | # this Script will do the Backup and remove old copy. | ||
+ | # This script work based on existing DB Entry. | ||
+ | # When you initialize it only create one copy rest of the dummy entry need to be entered by you. | ||
+ | ##################################### | ||
+ | |||
+ | source config_bash | ||
+ | |||
+ | BASE=$(pwd) | ||
+ | BASE="$( cd "$( dirname "$0" )" && pwd )" | ||
+ | cd $BASE | ||
+ | DATE=$(date +%Y%m%d) | ||
+ | perl=$(which perl) | ||
+ | |||
+ | |||
+ | for inst in instance{1..10} | ||
+ | do | ||
+ | eval var1=\$$inst | ||
+ | arry=($var1) | ||
+ | if [[ $1 == "init" ]]; then | ||
+ | if [ "$var1" != "" ] | ||
+ | then | ||
+ | vol=${arry[0]} | ||
+ | echo "Running backup for $vol stored in " | ||
+ | newsnp=`$perl create_snap.pl $vol $DATE` | ||
+ | $perl db.pl add $vol $newsnp $DATE | ||
+ | echo "waiting." | ||
+ | $perl snap_status.pl $newsnp | ||
+ | echo "done" | ||
+ | fi | ||
+ | else | ||
+ | if [ "$var1" != "" ] | ||
+ | then | ||
+ | freq=${arry[1]} | ||
+ | vol=${arry[0]} | ||
+ | iter=${arry[2]} | ||
+ | lookup=$(echo "$iter * $freq" | bc) | ||
+ | isit=`date -d "now -$lookup days" +%Y%m%d` | ||
+ | isit_nxt=`date -d "now -$freq days" +%Y%m%d` | ||
+ | lstnc=(`$perl $BASE/db.pl get "$vol" "$isit"`) | ||
+ | if [ "$isit" == "${lstnc[1]}" ];then | ||
+ | echo "Running backup for $vol stored in " | ||
+ | newsnp=`$perl create_snap.pl $vol $DATE` | ||
+ | $perl db.pl add $vol $newsnp $DATE | ||
+ | echo "waiting." | ||
+ | $perl snap_status.pl $newsnp | ||
+ | echo "done" | ||
+ | lstnx=(`$perl $BASE/db.pl get "$vol" "$isit_nxt"`) | ||
+ | if [ "${lstnx[0]}" == '' ]; then | ||
+ | echo "Notify Admin" | ||
+ | else | ||
+ | if [ "${lstnc[0]}" != '' ]; then | ||
+ | $perl delete_snap.pl ${lstnc[0]} | ||
+ | fi | ||
+ | fi | ||
+ | else | ||
+ | echo "backup is not needed" | ||
+ | fi | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== create snapshot ==== | ||
+ | |||
+ | <code perl | create_snap.pl> | ||
+ | #!/usr/bin/perl -w | ||
+ | # Created / written by k2patel@hotmail.com | ||
+ | # this script create snapshot for given volume. | ||
+ | |||
+ | use Data::Dumper; | ||
+ | use strict; | ||
+ | #use Date::Calc qw( :all ); | ||
+ | |||
+ | use lib "/usr/share/perl5/vendor_perl"; | ||
+ | use Net::Amazon::EC2; | ||
+ | |||
+ | # Configuration. | ||
+ | require "config"; | ||
+ | |||
+ | # our $ec2; | ||
+ | our $awsId; | ||
+ | our $awsKey; | ||
+ | our $awsinstance; | ||
+ | |||
+ | my($num_args) = $#ARGV + 1; | ||
+ | if ($num_args < 2) { | ||
+ | print "\nUsage: create_snap.pl <Volume_ID> <Today>\n"; | ||
+ | print "This will create Snapshot for given Volume\n"; | ||
+ | print "Format for today's Date must be \"YYYYMMDD\"\n"; | ||
+ | exit 1; | ||
+ | } | ||
+ | |||
+ | ## Define Access Keys for Amazon. | ||
+ | my $ec2 = Net::Amazon::EC2->new( | ||
+ | AWSAccessKeyId => $awsId, | ||
+ | SecretAccessKey => $awsKey | ||
+ | ); | ||
+ | |||
+ | my @result = $ec2->create_snapshot( | ||
+ | VolumeId => $ARGV[0], | ||
+ | Description => $ARGV[1] | ||
+ | ); | ||
+ | |||
+ | print $result[0]->{snapshot_id}; | ||
+ | #print Dumper \@result; | ||
</code> | </code> |