Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74246
  • 博文数量: 47
  • 博客积分: 1230
  • 博客等级: 中尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-22 13:59
文章分类

全部博文(47)

文章存档

2012年(9)

2011年(38)

分类: Python/Ruby

2011-04-25 22:10:02

http://blogold.chinaunix.net/u2/89310/showart_1768574.html
http://blogold.chinaunix.net/u2/89310/showart_1768574.html
http://www.itpub.net/thread-891576-1-1.html#

 

 

1.tar最简单的增量备份命令

   tar -g snapshot -zcf full.tar.gz  test

   tar ztf   full.tar,gz

  第二次依然是

  tar -g snapshot -zcf increase-$date+%Y-%m-%d test

 

  这说明要理解tar活用tar各个参数的意思。

 

2.待续

  这是我正在使用的一段备份脚本 mybackup.sh

  在redhat Linux 7.2 下运行正常

  mybackup.sh

  代码:

  #!/bin/sh

  umount /mnt/bak

  mount /dev/sdb1 /mnt/bak

  if [ `date +%d` = '01' ] #每月1号进行完全备份

  then

  bakdir="/mnt/bak/daybak/month/"`date +%m%d`

  zl="" #进行完全备份

  else

  bakdir="/mnt/bak/daybak/"`date +%d`

  zl="-N "`date +'%Y-%m-01 00:00:01'`; #差异备份

  #zl="-N "`date -d '-1 day' +'%Y-%m-%d 00:00:01'` #日增量备份

  fi

  tmpbakdir=${bakdir}tmp

  rm -rf ${tmpbakdir}

  mkdir ${tmpbakdir}

  tar "${zl}" -czf ${tmpbakdir}/ /var/www/html

  tar "${zl}" -czf ${tmpbakdir}/etc.tgz /etc

  tar "${zl}" -czf ${tmpbakdir}/mysql.tgz /var/lib/mysql

  tar "${zl}" -czf ${tmpbakdir}/home.tgz /home

  tar "${zl}" -czf ${tmpbakdir}/name.tgz /var/name

  rm -rf $bakdir

  mv $tmpbakdir $bakdir

  umount /mnt/bak

  

  把mybackup.sh 放到 /etc/cron.daly 中即实现可月循环 差异/增量 备份

  为方便恢复数据我使用了差异备份,如果想节约空间可以使用日总量备份,不过那样恢复数据时刻就要麻烦点了,另外你也可以很容易把上面的脚本改为周循环

  事项增量备份的另外方法是利用find命令,

  例如只备份一天前修改过的文件

  代码:

  find /var/www -type f -mtime -1 -print>/tmp/filelist.txt

  tar -cz -T /tmp/filelist.txt -f /mnt/bak/

3.

1.完全备份

tar -g snapshot -zcvf backup.tar --directory / --exclude=mnt --exclude=misc --exclude=proc --exclude=dev --exclude=sys --exclude=tmp --exclude=var/log .

其中 -g 选项为backup建立一个index,当第一次tar时,会建立这个index,以后就会根据这个index建立增量backup。

--directory 把当前目录移到/目录,别忘记最后那个.

根据当前的情况,选择1周1次完全备份,每天增量备份。用lftp把备份上传到备份服务器上,以下是script

#!/bin/bash

tar -g /home/alex/snapshot -zcvf /home/alex/backupdailyRING1`date +%Y%m%d`.tar.gz --directory / --exclude=mnt --exclude=misc --exclude=proc --exclude=dev --exclude=sys --exclude=tmp --exclude=home/alex --exclude=var/log .

cd /home/alex

lftp < < EOF

open 192.168.0.1

user administrator 246069945

mput backupdailyRING1*


bye

EOF

rm -f backupdailyRING1*

EOF内为lftp的命令,注意mput才可以用正则表达式。

可以用tar -zft backup.tar 查看文件列表

2.gzip

tar文件并没有压缩,所以用gzip压缩

gzip -9 backup.tar

-9为最高压缩率,解压缩gzip -d backup.tgz

3.加入crontab

47 9 * * * /etc/webmin/cron/tempdelete.pl
30 1 * * 1-6 /home/alex/ringbackup.sh
0 1 * * 0 /home/alex/ringfullbackup.sh

0为星期日
 

 

4.

公司的linux服务器使用的是一台普通的台式机,缺乏灾难恢复的机制。公司大量数据存放在该服务器上,一旦发生故障后果不堪设想。所以需要对这个机器的重要数据进行有效的备份。经过几天捉摸收集资料,终于编写出了自己的linux脚本,实现了每月的完整备份,和每天的增量备份,打包出来的文件内有当天备份的文件详细列表,以便以后恢复时查找。增量备份存储90内的数据,90以前的将被自动删除。所有备份文件本地保存一份,通过网络自动备份到另外一个主机一份,做到了万无一失。

下面是详细的脚本内容

#!/bin/sh

DATE=`date +%F-%H`

host="192.168.16.17"

id="admin"

pw="123456"

ftpdir="days"

baktime=`date --date='90 days ago' +%Y-%m-%d`

if [`date +%d`='1']

then

filename="linux$DATE.tar.gz"

basedir="/mnt/smb/bak/monthly"

zl=""

bakdir="/data/ARCA/work/linux"


else

filename="bak$DATE.tar.gz"

basedir="/mnt/smb/bak/days"

zl="-T /tmp/filelist-2.daily"

bakdir=""

fi



find /data/ARCA/work/linux/ -type f -mtime -1 -print >$bakdir/filelist.daily

cat /tmp/filelist.daily |grep '\.[c.h]$' >/tmp/filelist-2.daily

#echo $baktime

#tar -N '$baktime' zcvf $basedir/$filename $bakdir

tar $zl -czvf ${basedir}/$filename ${bakdir}


#Starting FTP to send file

cd $basedir

ftp -n >"$basedir"/"$filename".log 2>&1 <
open $host

user $id $pw

binary

cd $ftpdir

mput $filename

bye

EOC


test -e bak$baktime.tar.gz && rm -f bak$baktime* || echo Not fonud this files

将文件存放到/etc/cron。daily目录下,该目录为系统定期运行的目录,该脚本将每天运行一次,每个月的1号进行完整本分,其他日期进行增量备份.有些文件不重要所以只选择.c .h文件进行备份。

该脚本还不完善,如果未能发送到远程主机不能自行判断,下面我将对该问题进行修改

该脚本在经过简单修改后,可以实现数据的本分与主从同步。使用范围比较广泛。
阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~