perl 增量、全量备份脚本

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

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, $archiveDir, $zipName, $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 $target\n";

# 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 failed\n";

#输出同步内容
    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;
}
时间: 2024-10-16 10:45:44

perl 增量、全量备份脚本的相关文章

Xtrabackup 全量备份脚本

#!/bin/bash #备份文件的名字为当前主机的IP地址+tar.gz,例如172.16.103.1.tar.gz,且每次备份成功之后都会清空本地的备份目录. #相关目录 mkdir -p /xtrabackup/mysql back_dir="/xtrabackup/mysql" backfilename=`ip add | grep "inet" | grep 172 |grep brd |awk -F / '{print $1}' | awk -F&quo

Xtrabackup全量备份/增量备份脚本

一.全量备份脚本 1.全量备份脚本 #!/bin/bash #Description:xtrabackup complete #Author:created by michael #2017-08-07 v0.1 # USER=root PASSWD=123456 BACKUP_DIR=/backup/mysql/complete DATE=$(date +"%F_%T") [[ -d $BACKUP_DIR ]] || mkdir $DATE_DIR innobackupex --u

SVN自动实现全量备份(Windows服务器)

一.SVN全量备份脚本: 1)新建文件backup.bat,打开编辑,输入如下内容: echo off rem Subversion的安装目录 set SVN_HOME="C:\Program Files (x86)\VisualSVN Server" rem 所有版本库的父目录 set SVN_ROOT=D:\Repositories rem 备份的目录 set BACKUP_SVN_ROOT=D:\SvnBak       (备注:红色标识的地方根据实际情况需要修改) rem 创建

mysql备份脚本,一天执行一次全量备份,三次增量备份

线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at 2016-10-02 #scripte name : full_backup.sh #descriptioni : mysql full backup. oneday at a time. #time info date=`date +%Y%m%d` #time_now1=`date +%Y%m%d-%H:%M:%S` #dir info BACKUP_DIR="/app/dbbackup/fu

负责数据库的备份,实现周一 之 周六增量备份,周日全量备份

1.mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld] log-bin ="/home/mysql/logbin.log" binlog-format = ROW log-bin-index ="/home/mysql/logindex" binlog_cache_size=32m max_binlog_cache_size=512m max_binlog_size=512m 重启mys

全量备份与增量备份实践

1.1 全备备份与恢复全备实践 ####################################################################################### 1.安装Xtrabackup备份命令 wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo yum -y install perl perl-devel libaio libaio-dev

Xtrabackup 备份大数据库(全量备份和增量备份)

Xtrabackup Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁): mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合. Xtrabackup优点 1)备份速度快,物理备份可靠 2)备份过程不会打断正在执行的事务(无需锁表) 3)能够基于压缩等功能节约磁盘空间和流量 4)自动备份校验 5

mysql的全量备份与增量备份

全量备份:可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表. 备份所有数据库:[[email protected] ~]# mysqldump -uroot -p123456 --all-databases >/opt/all.sqlmysqldump: [Warning] Using a password on the command line interface can be insecure. 备份单个数据库的所有表:[[email protected]

linux自动代码增量备份 结合 全量备份

需求说明 系统环境:linux(centos7)备份内容:增量备份 结合 全量备份 公司中的生产服务器数据非常重要,所以我们需要通过备份服务器将生产服务器的数据进行备份. rsync的增量备份,不单单会同步新增的内容,就连删除的内容也会同步.假如管理代码人员误操作将代码误删除,那么备份服务器检测到备份原的数据产生变化后,也会与其同步,此时生产服务器与备份服务器的代码都会丢失. 增量备份要求的频率较高,但在生产与备份服务器之间的网络资源消耗较少,所以我们可以使用rsync来做增量备份,然后结合在备