需求分析:
(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个占位符

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

1725

被折叠的 条评论
为什么被折叠?



