Linux Shell脚本 备份数据库

本文介绍了一个使用bashshell脚本实现的Linux数据库备份过程,包括定时凌晨备份、文件命名规则、压缩打包以及清理10天前的旧备份。脚本还涉及了crontab定时任务调度。

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

#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#备份的数据库名
DATABASE=Linux

#创建备份目录,如果存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ]&& mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}

#删除对应的备份文件
rm -rf ${BACKUP}/${DATETIME}

#删除10天前备份的文件
#查找BACUP目录下10天前的备份文件 备份文件名字为 *.tar.gz 如果有就删除
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf{} \;
echo "备份数据库${DATABASE}成功~"

#!/bin/bash

shell脚本的开头 用于指定该脚本用哪个shell来解释执行

shell脚本的变量定义

(1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

(2) 等号两侧不能有空格

(3) 变量名称一般习惯为大写,这是一个规范,我们遵守即可 

将命令的返回值赋给变量

(1) A=`date`反引号,运行里面的命令,并把结果返回给变量 A

(2) A=$(date) 等价于反引号 

 区分${} 和 $()

${}用于获取引用变量的值

例如:

name="Alice"
echo "Hello, ${name}!"  # 输出:Hello, Alice!

$()用于执行命令并获取返回值结果

例如:

current_date=$(date +%Y-%m-%d)
echo "Today is ${current_date}"  # 输出:Today is 2023-11-03

判断目录是否存在 test命令 或 [  ]

# 使用test命令判断目录是否存在
if test -d "/path/to/directory"; then
  echo "Directory exists"
else
  echo "Directory does not exist"
fi

# 使用方括号[]来判断目录是否存在
if [ -d "/path/to/directory" ]; then
  echo "Directory exists"
else
  echo "Directory does not exist"
fi

mysqldump 

#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} 
| gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
  • u${DB_USER}: 指定数据库连接用户名,${DB_USER}是一个变量,表示数据库用户名。
  • -p${DB_PW}: 指定数据库连接密码,${DB_PW}是一个变量,表示数据库密码。
  • --host=${HOST}: 指定数据库服务器地址,${HOST}是一个变量,表示数据库服务器地址。
  • -q: 使用静默模式,减少输出的冗余信息。
  • -R: 同时备份存储过程和函数。
  • --databases ${DATABASE}: 指定要备份的数据库名,${DATABASE}是一个变量,表示要备份的数据库名。
  • | gzip: 将备份数据通过管道传递给gzip程序进行压缩。
  • > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz: 将压缩后的备份数据输出到指定的文件,${BACKUP}是备份目录的路径,${DATETIME}是备份的日期时间信息

 查找文件并删除

find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf{} \;
  • ${BACKUP}:表示要查找的目录路径,${BACKUP}是一个变量,可以根据实际情况进行替换。
  • -atime +10:表示查找访问时间距今超过10天的文件。+10表示大于10天,如果要查找其他时间范围的文件,可以修改这个参数。
  • -name "*.tar.gz":表示查找文件名以.tar.gz结尾的文件。*.tar.gz是通配符表达式,匹配任意文件名以.tar.gz为后缀的文件。
  • -exec rm -rf {} \;:表示对每个符合条件的文件执行rm -rf {}命令,即递归强制删除文件或目录。{}表示当前匹配到的文件名,\;表示命令结束。

综合起来,该命令的作用是在指定的${BACKUP}目录下,查找访问时间超过10天且文件名以.tar.gz结尾的文件,并将其递归地强制删除。

 crond任务调度

crontab [选项]

功能:进行定时任务的设置

-e 编辑crontab定时任务

-l 查询crontab认为

-r 删除当前用户所有的crontab任务

5个占位符 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值