Chinaunix

标题: 介绍一个实用的备份小工具rdiff-backup [打印本页]

作者: FunBSD    时间: 2005-07-26 16:01
标题: 介绍一个实用的备份小工具rdiff-backup
作者:FunBSD
最后更新:2005年7月26日   

目录:
说明
安装
命令
运行环境
生成密钥
备份内容
备份脚本
定时运行

#####################################
# 说明:
#####################################

rdiff-backup是一个基于librsync的同步增量备份工具
网址:http://www.nongnu.org/rdiff-backup/

#####################################
# 安装:
#####################################

预安装:
OpenSSH、Python2.2+

安装librsync:
  1. tar zxvf librsync-0.9.7.tar.gz
  2. cd librsync-0.9.7
  3. ./configure
  4. make all check
  5. make install
  6. ldconfig
复制代码


安装rdiff-backup:
  1. tar zxvf rdiff-backup-0.13.6.tar.gz
  2. cd rdiff-backup-0.13.6
  3. python setup.py --librsync-dir=/usr/local install
复制代码


注:
rdiff-backup在cygwin上新建备份有错误,但可以通过远程进行备份和恢复

#####################################
# 命令:
#####################################

测试:
  1. rdiff-backup --test-server server::/ignored
复制代码


备份:
  1. rdiff-backup /source-dir /dest-dir
  2. rdiff-backup /source-dir user@server::/dest-dir
  3. rdiff-backup -v5 --print-statistics userX@serverN::/source-dir userY@hostM::/dest-dir
复制代码


恢复:
  1. rdiff-backup -r now user@server::/remote-dir/file /local-dir/file
  2. rdiff-backup -r 10D user@server::/remote-dir/file /local-dir/file
复制代码


清理:
  1. rdiff-backup --remove-older-than 2W  user@server::/remote-dir
  2. rdiff-backup --remove-older-than 20B user@server::/remote-dir
复制代码


查看:
  1. rdiff-backup -l backup-dir/file
  2. rdiff-backup --list-at-time 5D backup-dir/subdir
  3. rdiff-backup --list-changed-since 5D backup-dir/subdir
  4. rdiff-backup --calculate-average backup-dir/rdiff-backup-data/session_statistics*
复制代码


#####################################
# 运行环境:
#####################################

# 逻辑结构:
管理服务器(相当于master):admin
备份服务器(相当于media ):backupA、backupB、backupC、......
应用服务器(相当于client):server1、server2、server3、......

# 物理结构:
三种角色的服务器可以任意组合或分离
只要带宽满足备份需求,在物理位置上没有任何限制
管理服务器能够同时连接备份服务器和应用服务器即可
备份服务器和应用服务器之间不需要连接,管理服务器会在两者之间建立安全通道
备份数据流向:应用服务器---(管理服务器)--->;备份服务器
   
#####################################
# 生成密钥:
#####################################

#在管理服务器上生成密钥,并把公钥复制到备份服务器和应用服务器上

  1. ssh-keygen -b 1024 -t rsa

  2. ssh serverA "mkdir .ssh; chmod 0700 .ssh"
  3. scp ~/.ssh/id_rsa.pub serverA:.ssh/authorized_keys
  4. ......
  5. ssh server1 "mkdir .ssh; chmod 0700 .ssh"
  6. scp ~/.ssh/id_rsa.pub server1:.ssh/authorized_keys
  7. ......
复制代码


#####################################
# 备份内容:
#####################################

  1. #应用服务器  源目录  备份服务器  目的目录  备份保留时间
  2. server1      /dir1   backupA     /dir1     15D
  3. server1      /dir2   backupB     /dir2     2W
  4. server2      /dir3   backupC     /dir2     3M
  5. server3      /dir3   backupC     /dir3     2005-05-01
复制代码

......

#注:
如果目录带空格,则每个空格都要使用转义字符"\"

#时间格式:
  1. s -->; seconds
  2. m -->; minutes
  3. h -->; hours
  4. D -->; days
  5. W -->; weeks
  6. M -->; months
  7. Y -->; years
  8. B -->; newest increment
  9. YYYY-MM-DD
复制代码


#####################################
# 备份脚本:
#####################################

  1. #!/bin/sh
  2. #set -x

  3. PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

  4. DATE=`date +%F-%R`

  5. BACKUP_FILE=`dirname $0`/backup.txt
  6. BACKUP_LOG=`dirname $0`/backup.log

  7. BACKUP_MAIL=backup@domain.com
  8. ADMIN_MAIL=admin@domain.com

  9. usage()
  10. {
  11.   echo "USAGE: $0 -b(backup)|-r(remove)"
  12. }

  13. if [ ! -f $BACKUP_FILE ]
  14. then
  15.   echo "$BACKUP_FILE not found."
  16.   exit 1
  17. fi

  18. if [ $# -ne 1 ]
  19. then
  20.   usage
  21.   exit 1
  22. fi

  23. case $1 in
  24. -b)echo "=============Backup at $DATE============="
  25.    sed '/#/d;/^[[:blank:]]*$/d' $BACKUP_FILE | sort -u | while read APPLI_SERVER APPLI_DIR BACKUP_SERVER BACKUP_DIR TIMER
  26.    do
  27.      SAVED_IFS="$IFS";IFS=
  28.      eval ssh -f $BACKUP_SERVER \'mkdir -p \"$BACKUP_DIR\"\'
  29.      eval rdiff-backup $APPLI_SERVER::\"$APPLI_DIR\" $BACKUP_SERVER::\"$BACKUP_DIR\" || echo "Backup $APPLI_SERVER::$APPLI_DIR Failed." | tee -a $BACKUP_LOG | sendmail -f $BACKUP_MAIL $ADMIN_MAIL
  30.      IFS="$SAVED_IFS"
  31.    done
  32. ;;
  33. -c)echo "=============Clean at $DATE============="
  34.    sed '/#/d;/^[[:blank:]]*$/d' $BACKUP_FILE | sort -u | while read APPLI_SERVER APPLI_DIR BACKUP_SERVER BACKUP_DIR TIMER
  35.    do
  36.      SAVED_IFS="$IFS";IFS=
  37.      eval rdiff-backup --remove-older-than $TIMER $BACKUP_SERVER::\"$BACKUP_DIR\" || echo "Clean $BACKUP_SERVER::$BACKUP_DIR Failed." | tee -a $BACKUP_LOG | sendmail -f $BACKUP_MAIL $ADMIN_MAIL
  38.      IFS="$SAVED_IFS"
  39.    done
  40. ;;
  41. *)usage
  42.   exit 1
  43. ;;
  44. esac
复制代码

#####################################
# 定时运行:
#####################################

#在管理服务器上定时进行备份和清理

  1. 0 2 * * * cd /home/backup/;./backup.sh -b 2>;>;backup.log && ./backup.sh -c 2>;>; backup.log
复制代码

作者: wind521    时间: 2005-07-26 16:36
标题: 介绍一个实用的备份小工具rdiff-backup
这个看来是基于Ssh & SCP上的,不错,研究一下
作者: wolfg    时间: 2005-07-26 17:33
标题: 介绍一个实用的备份小工具rdiff-backup
好东西,有时间试一下
作者: soway    时间: 2005-07-26 19:30
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2