具体要求如下:
- 每天凌晨 2:30 备份数据库 mysql 到 /data/backup/db
- 备份开始和备份结束都有对应的提示语
- 备份后的文件以时间为文件名,并打包成 .tar.gz 的形式。eg:2022-01-01_080808.tar.gz
- 在备份的同时,检查是否有超过15天前的备份数据库文件,如果有就将其删除
脚本如下:
#!/bin/bash
#备份路径
BACKUP=/data/backup/db
#显示当前时间
DATATIME=$(date "+%Y-%m-%d_%H%M%S")
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123qwe..
#备份的数据库名
DATABASE=db_shell
#开始备份数据库提示语
echo "开始备份数据库${DATABASE}"
#创建备份目录,如果不存在,则新建目录
[ ! -d ${BACKUP}/${DATATIME} ] && mkdir -p "${BACKUP}/${DATATIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} --databases ${DATABASE} | gzip > ${BACKUP}/${DATATIME}/$DATATIME.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATATIME.tar.gz ${DATATIME}
#删除已备份的目录
rm -rf ${BACKUP}/${DATATIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
#结束备份数据库提示语
echo "数据库${DATABASE}备份成功!"
定时任务如下:
[root@Rocky shell]# crontab -l
30 2 * * * /shell/mysql_db.backup.sh
执行结果如下:
[root@Rocky shell]# ./mysql_db.backup.sh_0222
开始备份数据库db_shell
mysqldump: [Warning] Using a password on the command line interface can be insecure.
2022-02-23_105956/
2022-02-23_105956/2022-02-23_105956.sql.gz
数据库db_shell备份成功!
[root@Rocky db]# ll
总用量 12
-rw-r--r--. 1 root root 1021 2月 22 16:59 2022-02-22_165934.tar.gz
-rw-r--r--. 1 root root 1018 2月 22 17:01 2022-02-22_170115.tar.gz
-rw-r--r--. 1 root root 1021 2月 23 10:59 2022-02-23_105956.tar.gz
解压查看压缩包sql内容: