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 ...
随机推荐
- OSI和TCP/IP
OSI和TCP/IP 1. OSI的七层网络结构(功能及特点) 1) 物理层:为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特.此外,该层中还具有确定连接设备的 ...
- poj分类解题报告索引
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
- C语言中文件操作
用两个指针变量来操作字符串. 多维数组在做函数参数的时候,会退化成为一个指针变量,变成一个指向一维数组的数组指针,注意,是一个指针变量. 一维数组在当作函数参数传递的时候,会退化成为一个对应类型的指针 ...
- Opencv— — kaleidoscope Filter
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- shell之sort和uniq 及wc 的使用
文本排序:sort -n:数值排序 -r: 降序 -t: 字段分隔符 -k: 以哪个字段为关键字进行排序 -u: 排序后相同的行只显示一次 ...
- python2代码批量转为python3代码
由于python存在python2和python3两个主要的版本方向,经常会有将python2的代码转到python3的环境下运行的需求.尤其是跑一些神经网络的代码时有很多是在python2的环境下写 ...
- NodeJS REST API with MySQL and Express
http://www.nodewiz.biz/nodejs-rest-api-with-mysql-and-express/ NPM Modules Express felixge/node-mysq ...
- 宝塔Linux 8888 进不去
一.前言 导致该问题的原因是 Python 版本问题,可能是您更新了 python 的问题.参考宝塔问题的解决方案做的小结.仅供自己做笔记,不作其他用途. 二.解决方案 1.进入shell 命令行,输 ...
- VS Supercharger插件
一.前言 Supercharger 是 VS 的一款插件,针对代码进行优化和着色,便于观察和区分. 二.下载及安装 下载的 URL 如下:Supercharger 下载地址 点击下载,下载完成以后,那 ...
- 安装MySQL出现1045错误
安装MySQL出现1045错误 一.运行环境 MySQL mysql-5.1.26-rc-win32 操作系统:Windows 7 X64 二.问题描述 安装MySQL过程中会涉及对root密码的设置 ...