双机备份

来自Shiyin's note
Shen讨论 | 贡献2017年2月10日 (五) 02:49的版本 →‎rsync
跳到导航 跳到搜索

pdumpfs

  • linux最好用的备份软件,结合crontab实现每日定时增量备份

rdiff-backup

rdiff-backup使用简介

  1. 备份到远程主机
    rdiff-backup /some/local-dir hostname.net::/whatever/remote-dir
  2. 恢复数据到最新
    rdiff-backup -r now host.net::/remote-dir/file local-dir/file
  3. 恢复到数据到10天以前
    rdiff-backup -r 10D host.net::/remote-dir/file /tmp/file
  4. 查看5天以前的目录树
rdiff-backup --list-at-time 5D out-dir/subdir
  1. 看目录和文件的修改记录
    rdiff-backup --list-increments out-dir/file,显示文件的修改记录
    rdiff-backup --list-changed-since 5D out-dir/subdir,显示5天以来目录的修改记录

rsync

  • 双机备份:用rsync备份数据库nbw1和论坛数据库vbb_db到备份服务器目标目录,生成以当前备份日期和时间命名的目录
date='date +%F-%H-%M'
rsync -za -e ssh --delete --progress /usr/local/mysql/data/nbw1 root@backserverIP:/DESTdir/$date
rsync -za -e ssh --delete --progress /usr/local/mysql/data/vbb_db root@backserverIP:/DESTdir/$date
  • 双机备份:用rsync异地同步备份htdocs目录,这样只拷贝不一样的内容并删除目标目录冗余内容
rsync -za -e ssh --delete --progress /usr/local/apache/htdocs root@DESTserverIP:/DESTdir
  • 本地备份:用rsync备份数据库nbw1和论坛数据库vbb_db到本机备份目录,生成以当前备份日期和时间命名的目录
rsync -ruv --delete --progress /usr/local/mysql/data/nbw1 /DESTdir/$date
rsync -ruv --delete --progress /usr/local/mysql/data/vbb_db /DESTdir/$date
  • 本地备份:用rsync本地同步备份htdocs目录,这样只拷贝不一样的内容并删除目标目录冗余内容
rsync -ruv --delete --progress /usr/local/apache/htdocs /localbackdir


rsync 实现增量备份

  • 备份要求: 所有的数据统一放到一个根目录下,主备份用每个备份点名字命名,增量备份目录为 increment,每个备份点的增量备份数据,全部放到这个目录下面,目录为当前日期,格式为 2007-08-11_11-22
文件目录树如下:
/var/backup/ 备份根目录
|---www/ 备份点1的主目录,这个目录里面的数据是备份完成后最新的
|---increment/ 增量备份根目录
|--- www/ 备份点1的差异/修改备份数据
|--- 2009-12-04_10-22 从最开始备份到08月11日10点22分,所修改的数据
|--- 2009-12-05_11-22 从10点22分到11点22分,所修改过的数据
  • 准备工作:
创建备份根目录: mkdir /var/backup,其他的目录备份时会自动被创建
# echo "secret" > /etc/rsyncd.conf
注意,这里不同于server端,这里只写密码即可
# chmod 600 /etc/rsyncd.conf

脚本

  1. vi /etc/rc.d/init.d/rsync.sh
#!/bin/bash
unset verb progress
for i in $*; do
 [ "$i" = "verb" ] && verb=v
 [ "$i" = "progress" ] && progress="--progress"
done
RSYNC_SERVER=192.168.10.3  #rsync server IP
AUTH_USER=backup
BAKROOT=/var/backup/
INC_DIR=increment
NOW=`date +%Y-%m-%d_%H:%M`
[ ! -e $BAKROOT ] && mkdir -p $BAKROOT
PASSWD_FILE=/etc/rsyncd.conf
PASSWD_PERM=`ls -l $PASSWD_FILE|awk '{print $1}'`
if [ "$PASSWD_PERM" != "-rw-------" ]; then
 echo -e "\nWARNING: permission of passwd file changed to 0600 \n";
 chmod 0600 $PASSWD_FILE
fi
LOGFILE=/var/log/rsync/rsyncbak.log
EXCLUDES=/var/log/rsync/exclude_file
[ ! -e $EXCLUDES ] && touch $EXCLUDES
BACKUP_MODULES="www" #如需备份多个目录,在“”内添加server端的模块名,用空格隔开
OPTIONS="--force --ignore-errors --delete --delete-excluded \
--exclude-from=$EXCLUDES $progress \
--password-file=$PASSWD_FILE --backup"
rm -f /var/log/rsync/log.*
log_id=0
for bakdir in $BACKUP_MODULES; do
 log_id=`expr $log_id + 1`
 SUBOPTS="--backup-dir=$BAKROOT/$INC_DIR/$BACKUP_MODULES/$NOW -az${verb}"
 rsync $OPTIONS $SUBOPTS $AUTH_USER@$RSYNC_SERVER::$bakdir \
 $BAKROOT/$bakdir | tee /var/log/rsync/log.$log_id
done
### 合并临时日志到备份日志中
cat /var/log/rsync/log.* >> $LOGFILE
rm -f /var/log/rsync/log.*
##### end of rsync.sh
  1. chmod a+x /etc/rc.d/init.d/rsync.sh
  • 开始备份
  1. /etc/rc.d/init.d/rsync.sh verb progress