• 一、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
    
    • 1
    • 2

    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 "=========备份成功========"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    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 " ========= 备份成功 ======== "

  • 相关阅读:
    【Rust练习】18.特征 Trait
    SSM框架,MyBatis-Plus的学习(下)
    工作记录---淘宝双11,亿级流量高并发是怎么抗住?(站在巨人的肩膀上学习,超开心~)--------脚踏实地,持续学习(看完这一篇获益匪浅)
    EasyCVR平台通过接口编辑通道出现报错“ID不能为空”,是什么原因?
    「MySQL」MySQL面试题全解析:常见问题与高级技巧详解
    MySQL事务的隔离级别
    单目标应用:火鹰优化算法(Fire Hawk Optimizer,FHO)求解微电网优化--提供MATLAB代码
    特殊矩阵:零矩阵(Zero)幺矩阵(Ones)单位矩阵(Identity)随机矩阵(Random)#matlab
    B. String Modification
    图像处理经典算法--SIFT尺度不变特征转换
  • 原文地址:https://blog.csdn.net/qq_41029923/article/details/126415773