“双机备份”的版本间差异

来自Shiyin's note
跳到导航 跳到搜索
无编辑摘要
 
(未显示同一用户的3个中间版本)
第1行: 第1行:
==pdumpfs==
双机定时备份资料整理
*linux最好用的备份软件,结合crontab实现每日定时增量备份
运行ntsysv,确保crond服务和[[rsync]]服务都自动运行


==rdiff-backup==
chkconfig --list检查服务列表,rsync服务基于xinetd服务,首先保证xinetd已启动
rdiff-backup使用简介
service crond start
service rsync start


#备份到远程主机
用ssh的公私钥的方法将两台机器用不输入密码的方法就可以访问,在主服务器终端:
#:rdiff-backup /some/local-dir hostname.net::/whatever/remote-dir
cd /root
#恢复数据到最新
mkdir .ssh
#:rdiff-backup -r now host.net::/remote-dir/file local-dir/file
ssh-keygen -t dsa
#恢复到数据到10天以前
提示输入密码时不输入密码
#:rdiff-backup -r 10D host.net::/remote-dir/file /tmp/file
将生成的 id_dsa.pub文件拷贝到备份服务器上,文件在你登陆用户目录的.ssh下
#查看5天以前的目录树
在备份服务器上将id_dsa.pub文件放到本机帐号的.ssh下,改名为authorized_keys
#:rdiff-backup --list-at-time 5D out-dir/subdir
chmod 700 .ssh
#查看目录和文件的修改记录
chmod 600 .ssh/authorized_keys
#:rdiff-backup --list-increments out-dir/file,显示文件的修改记录
在主服务器上编辑备份脚本
#:rdiff-backup --list-changed-since 5D out-dir/subdir,显示5天以来目录的修改记录
cd /usr/sbin/
#清除 20 次备份会话之前的备份[3]
vi backup.sh
#:rdiff-backup --remove-older-than 20B bak/
#删除两周备份:
#:rdiff-backup --remove-older-than 2W --force /media/backup/home_backup/


==[[rsync]]==
#!/bin/sh
# 将所有错误信息重定向到文件/tmp/error.txt中
exec 2>/tmp/error.txt


*双机备份:用rsync备份数据库nbw1和论坛数据库vbb_db到备份服务器目标目录,生成以当前备份日期和时间命名的目录
#停止mysql&PHP
/sbin/service httpd stop
/sbin/service mysql stop

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

#双机备份:用rsync异地同步备份htdocs目录,这样只拷贝不一样的内容并删除目标目录冗余内容
rsync -za -e ssh --delete --progress /usr/local/apache/htdocs root@DESTserverIP:/DESTdir
rsync -za -e ssh --delete --progress /usr/local/apache/htdocs root@DESTserverIP:/DESTdir
*本地备份:用rsync备份数据库nbw1和论坛数据库vbb_db到本机备份目录,生成以当前备份日期和时间命名的目录

#本地备份:用rsync备份数据库nbw1和论坛数据库vbb_db到本机备份目录,生成以当前备份日期和时间命名的目录
rsync -ruv --delete --progress /usr/local/mysql/data/nbw1 /DESTdir/$date
rsync -ruv --delete --progress /usr/local/mysql/data/nbw1 /DESTdir/$date
rsync -ruv --delete --progress /usr/local/mysql/data/vbb_db /DESTdir/$date
rsync -ruv --delete --progress /usr/local/mysql/data/vbb_db /DESTdir/$date
#本地备份:用rsync本地同步备份htdocs目录,这样只拷贝不一样的内容并删除目标目录冗余内容
*本地备份:用rsync本地同步备份htdocs目录,这样只拷贝不一样的内容并删除目标目录冗余内容
rsync -ruv --delete --progress /usr/local/apache/htdocs /localbackdir
rsync -ruv --delete --progress /usr/local/apache/htdocs /localbackdir


#再次启动mysql&PHP
/sbin/service mysql start
/sbin/service httpd start


===rsync 实现增量备份===
完成后,chmod +x backup.sh,将权限改为可执行
*备份要求: 所有的数据统一放到一个根目录下,主备份用每个备份点名字命名,增量备份目录为 increment,每个备份点的增量备份数据,全部放到这个目录下面,目录为当前日期,格式为 2007-08-11_11-22
然后crontab -e编辑定时触发事件,每天凌晨3点执行backup.sh
:文件目录树如下:
01 3 * * * /usr/sbin/backup.sh
/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

'''脚本'''
:# 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

:# chmod a+x /etc/rc.d/init.d/rsync.sh
*开始备份
# /etc/rc.d/init.d/rsync.sh verb progress

2017年2月10日 (五) 02:53的最新版本

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
  5. 查看目录和文件的修改记录
    rdiff-backup --list-increments out-dir/file,显示文件的修改记录
    rdiff-backup --list-changed-since 5D out-dir/subdir,显示5天以来目录的修改记录
  6. 清除 20 次备份会话之前的备份[3]
    rdiff-backup --remove-older-than 20B bak/
  7. 删除两周备份:
    rdiff-backup --remove-older-than 2W --force /media/backup/home_backup/

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