一、Shell编程_8Shell综合编程案例

一、Shell编程_8Shell综合编程案例

1. 需求分析:

1)每天凌晨2:10备份数据库 atguiguDB 到 /data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打成 .tar.gz 的形式,如:2018-03-12_230201.tar.gz
4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除;

思路分析:(如图)
代码实现:(描述如下、代码如_代码)
脚本编写完成后 ——交给crond执行:

crontab -e
10 2 * * * /usr/sbin/mysql_db_backup.sh

2. 代码实现:

[root@hadoop1 sbin]# vim mysql_db_backup.sh
#!/bin/bash
# 完成数据库的定时备份
#备份的路径
BACKUP=/data/backup/db
#获取当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
echo $DATETIME "或者" ${DATETIME}

echo "=========开始备份========"
echo "备份的路径是:$BACKUP/$DATETIME.tar.gz"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguigu
#创建备份的路径(不确定是否存在所以先判断)
#如果备份的路径文件夹存在就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz

#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME

#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=========备份成功========"

3. 思路详解:

(vim mysql_db_backup.sh:新建一个shell文件;# 完成数据库的定时备份。如图
首先mysql_db_backup.sh脚本中要有’/data/backup/db’这个路径的体现和数据库的体现,所以先确定路径:
#备份的路径’BACKUP=/data/backup/db’,这是准备备份的路径,数据库备份后文件名带有时间,所以要
#获取当前的时间作为文件名’DATETIME=$ (date +%Y_%m_%d_%H%M%S)‘,
#如果对结果不确定可以输出变量调试’echo $ DATETIME “或者” $ {DATETIME}’
#给出提示信息:开始备份,写出备份的路径让别人知道备份到哪里去了,
echo “备份的路径是:$ BACKUP/$ DATETIME.tar.gz”,通过路径 时间和后缀进行拼接。准备工作完成后,需要有数据库的信息
定义主机 用户名 密码几个变量:
#主机就备份本机的 HOST=localhost #用户名DB_USER=root #密码DB_PWD=root
然后创建备份的路径,这个路径目前不确定有没有,可能存在也可能不存在,如果有的话直接使用没有则创建,所以先创建
#如果备份的路径文件夹存在就使用,否则就创建。书写判断语句:
[ -d ]先判断它是不是一个目录,怎么判断?把路径写清楚:[ -d “$ BACKUP/$ DATETIME” ]来判断这个路径存不存在,
如果不存在即’!‘取反[ !-d “$ BACKUP/$ DATETIME” ],加上’&&‘如果为真就继续执行,即如果目录不存在就创建文件:
‘[ ! -d " $ BACKUP/ $ DATETIME" ] && mkdir -p " $ BACKUP/$ DATETIME" ‘(mkdir -p创建多级目录);可测试–
有了路径后可以准备备份数据库,需要定义一个变量即数据库名,要定义哪个数据库
#备份数据库名’DATABASE=atguigu’,#执行mysql的备份数据库的指令,通过mysqldump指令
mysqldump -u用户名 -p密码 --host定义备份的主机 要备份的数据库名(备份完后会得到一个内容,然后通过’|‘管道符zip压缩一下,
‘>‘压缩到哪里去,’$ BACKUP/$ DATETIME/$ DATETIME.sql.gz’/$ BACKUP备份路径下的’/$ DATETIME’临时路径’/$ DATETIME.sql.gz’临时的文件名)
‘mysqldump -u$ {DB_USER} -p$ {DB_PWD} --host=$ HOST $ DATABASE | gzip > $ BACKUP/ $ DATETIME/$ DATETIME.sql.gz’:
‘|‘左边表示备份完之后会拿到一个备份的内容,右边:通过gzip压缩,压缩完之后把内容放到备份文件$ BACKUP下的一个子目录$ DATETIME,
然后把名字存成$ DATETIME时间.sql.gz。/$ DATETIME是一个临时目录,因为后面会利用targz对$ DATETIME.sql.gz进行二次处理,后面会删掉。可测试–
到此备份完成。接着:
#打包备份文件(因为后面需要的是.tar.gz)
‘cd $ BACKUP’先切换到备份目录下才能打包
‘tar -zcvf $ DATETIME.tar.gz $ DATETIME’:因为已经在$ BACKUP目录了,直接对里面的$ DATETIME这个临时目录打包成$ DATETIME.tar.gz
#删除临时目录’rm -rf $ BACKUP/$ DATETIME’。
#删除10天前的备份文件:
‘find $ BACKUP -mtime +10 -name " * .tar.gz" -exec rm -rf {} ;’
首先$ BACKUP找到这个目录下的,-mtime按照时间找,+10表示10天前,-name按名字找,-name " * .tar.gz"名字带有.tar.gz的,
如果找到了就-exec执行一个指令’rm -rf {} ;’
(‘find’找’$BACKUP’目录中’-name’按名字查找’-mtime +10’10天前带有’tar.gz’的文件,‘-exec’执行’rm -rf’强制删除,’{} ;’
找到的那些文件(固定写法))
提示:echo " ========= 备份成功 ======== "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值