shell脚本实现自动化备份
1、备份规则:
在生产环境中有若干服务器需要定时将服务器中应用程序,以及数据库等进行备份。要求在本地服务器中保存近一周的备份,备份服务器中保存最近一月的备份文件。

以服务器A为例:在服务器A上有应用程序业务及(/ucap/UServer_V5.5.1_5002),有数据库业务(mongodb和mysql)需要将以上三个业务进行备份,且在A服务器上创建backup-dir将备份文件存放在目录下,每日凌晨进行备份,并将备份文件上传至备份服务器(NFS),在平时备份服务器与服务器A不会有联系,即只是在上传备份文件,服务器A自动挂载备份文件共享目录,备份完成卸载目录。本地服务器保存近一周文件,备份服务器保存近30日备份文件。
2、具体实现如下步骤:
#delet backup when is sunday 周日删除上周文件。
WEEK=$(date +%w)
BACKUP_ROOT=/backup
BACKUP_DIR=/backup/backup_full_`date +%F`
if [ -e $BACKUP_ROOT ]
then
cd $BACKUP_ROOT #如果/backup目录存在,进入目录。
if [ $WEEK -eq ]
then
rm -rf $BACKUP_ROOT/* #如果进入是星期天(0表示星期天)执行删除/backup下所有的备份文件。
fi
if [ $? -eq 0 ] #判断是否删除成功
then
action "old-backup is remove." /bin/true
fi fi
####mkdir backup-dir #创建本地备份目录。如果目录存在则输出目录已经存
#在,否则表示不存在目录则创建包含时间的目录文件目录
if [ -e $BACKUP_DIR ]
then
action "$BACKUP_DIR had been created." /bin/true
else
#含当前时间的目录文件实际可以用$BACKUP_DIR
mkdir -p /backup/backup_full_`date +%F`
action "$BACKUP_DIR is creating." /bin/true
fi
本地创建备份目录及周日删除
注意:周日删除必须在创建当天目录之前。因为一旦先创建目录在删除文件由于使用的是rm -rf $BACKUP_ROOT/*意思是将本地备份目录下的所有文件删除,所有新创建的目录也会被删除。因此应该执行先删除再创建。
###tar backup /ucap/UServer_V5..1_5002
CMSP=/ucap
cd $CMSP
FILE_UCM=UServer_V5..1_5002
#使用tar -g快照功能进行备份将快照snapshot.cms也存放在备份目录下,然后将备份文件按照ip地址以及日期进行打包存放在备份目录下的当日文件目录下。
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null >& if [ $? = ] #判断是否执行成功。
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
###tar backup /ucap/mongodb
CMSP=/ucap
cd $CMSP
FILE_UCM=mongodb
#备份规则同上。
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null >& if [ $? = ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
备份文件及mongodb
#parameter defined
BAKDATE=`date +%F`
MYSQL_PATH=/usr/local/mysql/bin
MYUSER=root
MYPASS="Ucap7890&*()"
#DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep cpmdb`
DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
#command defined
#定义mysqldump命令备份cpmdb库并进行行锁
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock -F -B cpmdb --single-transaction -e"
#backup command#执行命令并用GZI打包至备份目录当前日期下的文件中。
${MYSQL_DUMP} | gzip > $DATA_FILE
Mysql备份
#####copye backup_tar to backup_server
BACKUP_SERVER=23.202.1.23:/backup/Search #NFS备份服务器
LOCAL_DIR=/backup1 #本地挂载点
RPC_PID=`/etc/init.d/rpcbind status|wc -l` #判断RPC
MOUNT_STATUS=`df -h | grep backup1 | wc -l` #判断是否已经挂载
BACKUP_FILEDIR=backup_full_`date +%F`
SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'` #本机IP
if [ ! -e ${LOCAL_DIR} ] #判断挂载点目录是否存在
then
mkdir ${LOCAL_DIR}
fi if [ ${RPC_PID} -eq ] #判断RPC-BIND是否启动没有启动执行启动
then
/etc/init.d/rpcbind start
fi
if [ $MOUNT_STATUS -eq ] #判断NFS是否挂载没有挂载执行挂载
then
mount -t nfs ${BACKUP_SERVER} ${LOCAL_DIR}
cd ${LOCAL_DIR} #进入挂载目录
find ${LOCAL_DIR} -mtime + -exec rm{} \; #删除30天以前文件
if [ `find ${LOCAL_DIR} -mtime + -exec ls{} \;|wc -l` -eq ] #如果没有了30天前的文件将本地备份目录下的备份文件备份至备份服务器。
then
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
fi
if [ $? -eq ] #判断执行是否成功,成功后卸载挂载目录。
then
umount -l ${LOCAL_DIR}
fi
else #表示已经挂载了NFS备份服务器执行删除备份卸载。
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime + -exec rm{} \;
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
umount -l ${LOCAL_DIR}
exit
fi
本地备份存放至本分服务器并删除30日前的备份文件
3、整个脚本,由于本分脚本中含有数据库密码所有在最好做判断只有root用户才能执行脚本。
#!/bin/bash
##########################################
# this script is created by xuxuedong. #
# e_mail:***@qq.com #
# qqinfo:*** #
# This is backup the fiel for the server. #
# version:1.1 #
##########################################
. /etc/init.d/functions
#set env
export PATH=$PATH:/bin:/sbin:/usr/sbin
export LANG="zh_CN.GB18030" # Require root to run this script. 判断是否是root用户执行。
if [[ "$(whoami)" != "root" ]]; then
echo "Please run this script as root." >&
exit
fi # Source function library.
#. /etc/init.d/functions
WEEK=$(date +%w)
BACKUP_ROOT=/backup
BACKUP_DIR=/backup/backup_full_`date +%F`
if [ -e $BACKUP_ROOT ]
then
cd $BACKUP_ROOT
if [ $WEEK -eq ]
then
rm -rf $BACKUP_ROOT/*
fi
if [ $? -eq 0 ]
then
action "old-backup is remove." /bin/true
fi
else
echo "Time is not, cannot be deleted." /bin/false fi
####mkdir backup-dir
if [ -e $BACKUP_DIR ]
then
action "$BACKUP_DIR had been created." /bin/true
else
mkdir -p /backup/backup_full_`date +%F`
action "$BACKUP_DIR is creating." /bin/true
fi
###tar backup /ucap/UServer_V5.5.1_5002
CMSP=/ucap
cd $CMSP
FILE_UCM=UServer_V5.5.1_5002
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null 2>&1 if [ $? = 0 ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
###tar backup /ucap/mongodb
CMSP=/ucap
cd $CMSP
FILE_UCM=mongodb
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null 2>&1 if [ $? = 0 ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
#parameter defined
BAKDATE=`date +%F`
MYSQL_PATH=/usr/local/mysql/bin
MYUSER=root
MYPASS="Ucap7890&*()"
#DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep cpmdb`
DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
#command defined
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock -F -B cpmdb --single-transaction -e"
#backup command
${MYSQL_DUMP} | gzip > $DATA_FILE #####copye backup_tar to backup_server
BACKUP_SERVER=23.202.1.23:/backup/Search
LOCAL_DIR=/backup1
RPC_PID=`/etc/init.d/rpcbind status|wc -l`
MOUNT_STATUS=`df -h | grep backup1 | wc -l`
BACKUP_FILEDIR=backup_full_`date +%F`
SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'`
if [ ! -e ${LOCAL_DIR} ]
then
mkdir ${LOCAL_DIR}
fi if [ ${RPC_PID} -eq 0 ]
then
/etc/init.d/rpcbind start
fi
if [ $MOUNT_STATUS -eq 0 ]
then
mount -t nfs ${BACKUP_SERVER} ${LOCAL_DIR}
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime +30 -exec rm{} \;
if [ `find ${LOCAL_DIR} -mtime +30 -exec ls{} \;|wc -l` -eq 0 ]
then
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
fi
if [ $? -eq 0 ]
then
umount -l ${LOCAL_DIR}
fi
else
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime +30 -exec rm{} \;
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
umount -l ${LOCAL_DIR}
exit 1
fi
所有脚本
shell脚本实现自动化备份的更多相关文章
- Shell脚本,自动化发布tomcat项目【转载】
Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...
- Shell脚本,自动化发布tomcat项目【转】
Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...
- 使用shell脚本定时执行备份mysql数据库
使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...
- Centos上通过shell脚本实现数据库备份和还原
最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...
- 用shell脚本实现定时备份数据库
1.备份数据库的方法 可以使用命令查看 ls /usr/local/mysql/bin 这个mysqldump就是系统内置的用来备份数据库的工具. 2.实现方法 ①先随便进入一个位置创建一个目录 ② ...
- shell脚本每天自动备份mysql数据库
一.mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息: 二.使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求: /usr/b ...
- 使用shell脚本来自动化处理我们的工作,解放双手
Shell脚本介绍 1.Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. 2.Shell可以直接使用在wi ...
- shell脚本实现定时备份某文件
1:目标 实现在图像化界面输入需要备份的源文件路径.目标路径,定时的时间.然后通过输入的信息,把需要备份的源文件打包放到指定的目标路径下以执行定时任务的时间为子目录 把/she ...
- 使用shell脚本完成自动化部署及秒级回滚
一.部署机代码目录结构 使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系. [www@ansible-node1 deploy]$ tree ...
随机推荐
- linux应用之Mongodb的安装及配置(centos)
Mongodb是一种nosql类型的数据库,高性能.易部署.易使用的特点在IT行业非常流行. 下面介绍一下mongodb的安装方式,这里我们是在linux下安装,使用的是centos6.4 64位的, ...
- 洛谷【P839】【NOI导刊】——数页码
题面 一道找规律好题... 首先,我们肯定只能一位一位的统计答案,考虑从高位向低位统计,显然这样要方便的多. 对于第i位,我们统计从$a[i+1]*10^i+0$到$a[i+1]*10^i+a[i]* ...
- centos服务器安装配置Postgre9.6
安装: STEP1:下载对应rpm yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64 ...
- 003 - 修改Pycharm的项目文件树样式
相信习惯了Eclipse或者Windows的小伙伴对于Pycharm的目录树一定觉得特别别扭 因为它总是在文件前加一个三角形标注, 这样的标注在视觉上十分误导层级关系 修改的方式为 File -& ...
- Linux串口通信中一种接收不到数据的问题的解决
转载来源:嵌入式系统之初学者点滴 (百度空间) 原文 在这篇文章()中,实现了Linux环境下的串口读写操作,程序也运行成功了.但是再进一步测试时发现,如果开机之后直接如上文中所说,分别运行读程序和写 ...
- Docker运行MongoDB及Redis及ssh端口映射远程连接
Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...
- WebBrowser内嵌页面的跨域调用问题
很早之前我写过一篇Blog:网页通过External接口与WebBrowser交互,文中的交互其实只介绍了JS调用C++的部分,而C++调用JS由于微软自己的例子太多,那篇文章就没介绍,不过我最近遇到 ...
- PICO 中关于时基ps3000aGetTimebase函数介绍
- Bean的不同配置方式比较与应用场景
基于XML配置 Bean的定义: 在XML文件中通过<bean>元素定义. Bean的名称: 通过<bean>的id或name属性定义. ...
- Eclipse用Runnable JAR file方式打jar包,并用该jar包进行二次开发
目录: 1.eclipse创建Java项目(带jar包的) 2. eclipse用Export的Runnable JAR file方式打jar包(带jar包的) 打jar包 1)class2json1 ...