加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 增量、全量备份脚本

发布时间:2020-12-15 23:48:27 所属栏目:大数据 来源:网络整理
导读:脚本采用json配置文件,可以自定义,备份目录,全量备份周期,增量备份时间等。 {"backupDir":"/data_backup","archiveDir":"/archive_dir","original":"/www/","fullDayBase":10} #!/usr/bin/perluse warnings;use File::Copy::Recursive qw/dircopy rcopy/

脚本采用json配置文件,可以自定义,备份目录,全量备份周期,增量备份时间等。

{"backupDir":"/data_backup","archiveDir":"/archive_dir","original":"/www/","fullDayBase":10}
#!/usr/bin/perl
use warnings;
use File::Copy::Recursive qw/dircopy rcopy/;
use File::Rsync;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use JSON;
use File::Basename;
use POSIX qw(strftime);
use Data::Dumper;
my ( $day,$json );
my $backupDate = strftime( "%Y%m%d",localtime(time) );
open JSON,"/sh/rsyncfile/backupconf.json" or die "$!";
$json = $_ while <JSON>;
my $hashRef     = decode_json $json;
my $originalDir = $hashRef->{original};       #记得加/,不加/ 弹鸡鸡
my $backupDir   = $hashRef->{backupDir};
my $archiveDir  = $hashRef->{archiveDir};
my $fullDayBase = $hashRef->{fullDayBase};    #全备份周期

$day = $1 if $backupDate =~ /(d{2})$/;
mkdir $backupDir  unless -d $backupDir;
mkdir $archiveDir unless -d $archiveDir;
rsync_dir( $originalDir,$backupDir );        #同步目录

if ( $day % $fullDayBase == 0 ) {             #判断周期
    for my $zipName ( glob "$backupDir/*" ) {
        my $zipFromDir = basename($zipName);
        $zipName = basename($zipName) . "_" . $backupDate . '.zip';
        print $zipName,"n";
        zip_dir( $backupDir,$archiveDir,$zipName,$zipFromDir );
    }
}

#压缩目录
sub zip_dir {
    my ( $backupDir,$zipFromDir ) = @_;
    my $zip = Archive::Zip->new();
    my $dirMember = $zip->addTree( "$backupDir/$zipFromDir",$zipFromDir ); #递归压缩目录
    unless ( $zip->writeToFileNamed("$archiveDir/$zipName") == 0 ) {
        die 'write error';
    }

}

#同步目录
sub rsync_dir {
    my ( $source,$target ) = @_;
    print "rsync file from $source to $targetn";

    # archive 归档模式
    # compress 压缩
    # verbose 打印详细信息
    my $obj = File::Rsync->new(
        { archive => 1,compress => 1,del => 1,verbose => 1 } );
    $obj->exec( { src => $source,dest => $target } )
        or warn "rsync failedn";

    #输出同步内容
    print $obj->out;

}

#复制
sub copy {
    my ( $source,$target ) = @_;
    print $source,"n";
    if ( -d $source ) {
        $File::Copy::Recursive::CPRFComp = 1;
        dircopy( $source,$target ) or die "$!";
    }
    else {
        rcopy( $source,$target ) or die "$!";
    }
    return 1;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读