SVN自动化备份、恢复脚本(下)

#!/bin/bash

#本脚本是用来计算本地磁盘空间大小,并且与svn备份文件大小进行比较判断,当满足什么条件时,做出相应的响应。
#第一步是检测svn服务器,svn数据文件的总量大小和本机磁盘剩余空间的大小。
##连接10.68.3.152服务器,查看最新svn文件大小,获取查看的值。

datef() {
        date "+%Y/%m/%d %H:%M"
}

password=xxxx2015
svnreport=/data/log/report_`date "+%Y%m%d"`.log

if [[ ! -f $svnreport ]];then
        touch $svnreport
fi
echo "[$(datef)] 开始连接3.152服务器,查询svn大小" >> $svnreport

#查询svn文件大小
connect152() {

        expect -c " 
                set timeout 30
                spawn ssh [email protected]
                expect \"[email protected]\.168\.3\.152‘s password:\"
                send \"$password\r\"
                expect \"*# \"
                send \"cat \/data\/log\/report152.log\r\"
                expect \"eof\"
                  "
}

echo "[$(datef)] 开始连接3.65服务器,查询svn大小" >> $svnreport

connect65() {

        expect -c " 
                set timeout 30
                spawn ssh [email protected]
                expect \"[email protected]\.168\.3\.65‘s password:\"
                send \"$password\r\"
                expect \"*# \"
                send \"cat \/data\/log\/report65.log\r\"
                expect \"eof\"
                  "

}

#将查询的函数赋给变量,便于取值。

result152=$(connect152)
result65=$(connect65)

#过滤出我们需要的数值,也就是查询后的svn文件大小

echo "$result152 " |grep "/var/svn" | grep -v "#" | awk ‘{print $1}‘ >/dev/null
value152=`echo "$result152 " |grep "/var/svn" |grep -v "#" |awk ‘{print $1}‘`
echo "[$(datef)] ‘152上svn文件大小=‘$value152 ">> $svnreport

echo "$result65 " |grep "/data/svn" | grep -v "#" | awk ‘{print $1}‘ >/dev/null
value65=`echo "$result65 " |grep "/data/svn" |grep -v "#" |awk ‘{print $1}‘`
echo "[$(datef)] ‘65上svn文件大小=‘$value65 ">> $svnreport

#计算两台服务器上的svn文件大小总和
((value=$value152+$value65))

echo "[$(datef)] ‘两台svn,总文件大小=‘$value ">> $svnreport

#查询本地剩余磁盘空间,默认svn备份时在/svnbackup目录下,该目录有500G的空间。

value248=`df /svnbackup | awk ‘{print $4}‘| grep -v "Available"`

echo "[$(datef)] ‘本机剩余磁盘空间大小=‘$value248 ">> $svnreport

#判断比较,如果本地磁盘空间大于svn的文件,那么正常备份,否则发送邮件给管理员发出警告。

if [[ $value -lt $value248 ]]
then
        echo ‘开始执行3.65异地备份回滚动作‘>>$svnreport
        sh /data/scripts/auto_scp65.sh
        sleep 4h
        echo ‘开始执行3.152异地备份回滚动作‘>>$svnreport
        sh /data/scripts/auto_scp152.sh
else

        #这里做减法运算,最早svn保留8天的备份,当svn文件逐步增大后,就相应减少svn备份。
        #通过查询/data/log/num,该文件记录svn备份保留天数。

        NUM=`cat /data/log/num`
        #适当减少svn备份保留的次数
        NUM=$(expr $NUM - 1 )
        #将保留的值,存放起来,以便以后再次判断。
        echo "$NUM" > /data/log/num
        echo "[$(datef)] ‘NUM-1=‘$NUM ">> $svnreport
        
        fewdaysago=`date -d "$NUM day ago" +%Y%m%d`
        echo "[$(datef)] ‘fewdaysago=‘$fewdaysago" >> $svnreport

        #删除svn152备份
        cd /svnbackup/backup152
        if [[ -d $fewdaysago ]]
        then
                rm -rf $fewdaysago
        else
                echo "[$(datef)] $fewdaysago not exist in /svnbackup/backup152/ " >> $svnreport 2>&1
        fi

        #删除svn65备份
        cd /svnbackup/backup65
        if [[ -d $fewdaysago ]]
        then
                rm -rf $fewdaysago
        else
                echo "[$(datef)] $fewdaysago not exist in /svnbackup/backup65/ " >> $svnreport 2>&1
        fi

        #在备份最新的svn数据
        echo "[$(datef)] 备份最新的" >> $svnreport

fi

#判断NUM的值,当NUM的值不大于5的时候就发邮件给管理员。
#这里邮件采用的是mutt+msmtp 编辑发送。
#注:我这里测试邮件发送功能时,选择当num值不小于5时,就发送
NUM=`cat /data/log/num`
echo "[$(datef)] ‘NUM=‘$NUM ">> $svnreport

if [[ $NUM -ge 5 ]]
then
        echo "[$(datef)] 即将发送邮件给管理员">> $svnreport
        cat /data/log/report_`date "+%Y%m%d"`.log | mutt -s "warnning svn backup" [email protected]
fi

本例中,由于只需要向管理员发送报警邮件,而不需要邮件回复,因此就采用了mutt+msmtp 来实现这一功能。下面介绍如何配置。

#安装前,请确保服务器已安装如下包

yum install gcc gcc-c++ gnutls gnutls-devel gnutls-utils openssl openssl-devel libidn libidn-devel -y

#mutt可以用yum装
yum   -y   install   mutt*
#从网上down下msmtp的tar包
wget http://down1.chinaunix.net/distfiles/msmtp-1.4.28.tar.bz2

#解压tar包
tar   -jxvf   msmtp-1.4.28.tar.bz2
cd   msmtp-1.4.28
./configure    --prefix=/usr/local/msmtp
make  &&   make   install 

#创建msmtp的配置目录
mkdir   /usr/local/msmtp/etc
#创建mail账号文件
touch   /usr/local/msmtp/etc/msmtprc
#
vim     /usr/local/msmtp/etc/msmtprc
    defaults
    tls on
    #msmtp的日志文件
    logfile /usr/local/msmtp/msmtp.log
    #虚拟邮件账号名称acc2
    account acc2
    #通过qq邮箱,将邮件发送至管理员手中
    host smtp.qq.com
    port 465
    #表示邮件是从[email protected] 这个邮箱账号发送给管理员的账号
    from [email protected]
    auth login
    #qq邮箱不支持tls_starttls,因此需要关闭该选项。
    tls_starttls off
    tls on
    tls_certcheck off
    #这里记录了599080723邮箱账号的帐密信息
    user [email protected]
    #这里的密码是明文,
    password xxxxxxxxx
    #你可以配置多个虚拟邮箱账号,以便发送给不用邮箱类型的用户。
    account default : acc2
                   
        
接来下是配置mutt
    vim   /etc/Muttrc 
    #在文件的最后面,加入如下几行。
    #wangjl add new
    #设置执行mail发送的文件
    set sendmail="/usr/local/msmtp/bin/msmtp"
    #是否设置邮件的发送人
    set use_from=yes
    set realname="[email protected]"
    set editor="vim"
    #邮件的编码格式为utf8,之前没写这个,结果发送给我的邮件都是乱码。
    set charset="utf8"

#测试看是否可以发送邮件
echo  “this  is  a   test   mail” | mutt  -s  "title"   [email protected]  
#然后看1557882533的邮箱是否收到了测试邮件。
#如果测试成功的话,那么我们就可以将svn备份等信息发送给管理员,以便其判断svn是否备份回滚成功。
cat /data/log/report_`date "+%Y%m%d"`.log | mutt -s "warnning svn backup" [email protected]

那么至此,svn异地自动化备份和灾后恢复以及mail报警就实现了。

时间: 2024-08-01 17:38:52

SVN自动化备份、恢复脚本(下)的相关文章

SVN备份/恢复脚本

上一篇介绍了svn的配置,这里就写了两个脚本对svn进行全备和恢复,由于是全备,所以可以做个计划任务,每天执行一次即可.保留几天的数据. 1.备份脚本: #!/bin/sh # # # Description: SVN full backup of the project # Author: Mr.chen # Date: 2015/02/10 # Email:  # # SVN_BASICDIR="/usr/local/svn/bin" DAY=5 # Backup files ke

备份恢复脚本

# cat my_full_backup.sh #!/bin/bash BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"` format_time=`date +"%Y-%m-%d_%H:%M:%S"` week=`date +%w` port=3306 ip=192.168.1.101 backdir=/tmp/xtrabackup file_cnf=/app/mysqldata/3306/my.cnf user_name=xtrabk p

大话去哪儿网备份恢复平台

来源:http://mp.weixin.qq.com/s/ldu7iS5c3d0ND3foPYoLXQ 作者简介:许子文 曾任达梦高级数据库工程师,现任去哪儿网高级DBA,负责MySQL .Hbase运维和自动化运维工具的开发.在RDBMS拥有多年数据库架构设计.性能优化和运维经验,对海量数据有丰富的运维经验和个人见解. 备份恢复是DBA日常运维工作中的重中之重??怎么快速高效完成备份和恢复??怎么有效平衡DB数据量和业务重要等级??接下来从技术和业务的角度介绍Qunar数据库备份恢复平台的演变

xtrabackup备份恢复测试 -转

Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册 博文      博主 王恒-Henryhengwang.blog.chinaunix.net 我的项目:https://github.com/HengWang/ ChinaUnix博客技术文章推荐标准和规范 有奖征集:文集--博客系列博文管理 CU博客频道6月技术图书有奖试读活动 首页 | 博文目录 | 关于我 king_wangheng 博客访问: 486455 博文数量: 117 博客积分: 1715 博客等级: 上尉

Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是指备份执行时当天的日期),最后只保留最近7天的备份 2.上传/home/osyunweibak里面的备份文件到远程FTP服务器上,并且只保留最近7天的备份. 3.FTP服务器:192.168.21.139 端口:21 账号:osyunwei 密码:123456 osyunweibak为备份文件存放目

sql server 备份与恢复系列三 简单恢复模式下的备份与还原

原文:sql server 备份与恢复系列三 简单恢复模式下的备份与还原 一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重要,一般不建议使用这种模式. 例如对一个数据库有5次完整数据备份,时间是t5,  之后发生灾难,就会部丢失. 当数据库越来越大,完整备份时间会越来越长,为了减少丢失风险,引入差异备份.例如下图演示:在第一次建立数据库完整备份后

linux下SVN定时备份并删除历史备份

利用svnadmin hotcopy可以实现完全备份,但不能进行增量备份.svnadmin hotcopy是将整个库都"热"拷贝一份出来,包括库的钩子脚本.配置文件等:任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库. 优点是:备份过程较快,灾难恢复也很快:如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作. 缺点是:比较耗费硬盘,需要有较大的硬盘支持.在/data/svnbackup目录建立备份脚本svnbak.

xtrabackup一键自动化备份脚本 【原创】

xtrabackup一键自动化备份脚本 V1 [原创] xtrabackup备份工具安装与使用 http://990487026.blog.51cto.com/10133282/1697094 需要填写的信息 备份文件路径        backdir=/ASSET.innobackupex mysql用来备份用户   user=root mysql用户的密码     pass=asset 输出的信息保存路径    logfile=/var/www/html/index.html l [[ema

用shell脚本自动化备份数据库

防伪码:防止误删系统数据库,定时备份你我更安心! 使用shell脚本自动化备份数据库 一.简介 系统数据库如图所示(以MySQL5.5为例) 1.information_schema:信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息.在information_schema中,有数个只读表.它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件. 2.mysql:MySQL的的核心数据库,类似于SQLServer中的master表,主要负责存储数据库的用户.权限