shell定时备份数据库
摘要
- 讲解如何使用shell每天定时编写数据库
一、要求
- 每天
凌晨2:30
备份数据库db1到/data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
提示,备份的命令为
mysqldump -uroot -p123456abcd --host=localhost -q -R --databases db1 > back.sql
其中:
- root是用户名,123456abcd是密码
- db1是数据库(备份的就是数据库)
> back.sql
是将内容重定向至back.sql文件中,否则内容仅仅会在控制台打印
二、思路
首先编写shell
- 先写目录 /data/backup/db
- 然后获取时间 2021-03-12_230201
- 然后备份
二、步骤
1. 编写shell
- 首先获取时间
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db
# 当前时间,使用函数获取 $()
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME # 可以测试一下
- 然后配置其他参数
# 准备表示数据库的参数,表示一个数据库也就用以下几个参数
# 数据库的地址,这里使用本地数据库
HOST=localhost
#数据库的用户名
DB_USER=root
#数据库的密码
DB_PWD=123456abcd
#备份的数据库名
DATABASE=db1
- 检测并创建目录
#创建备份目录,如果不存在,则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
- 备份数据库
#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} > back.sql
- 如果还想压缩的话,可以继续写
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME/${DATETIME}.sql.gz
- gzip是压缩,然后重定向至文件
- 将文件转换成tar.gz
# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
- 删除10天前的备份文件
# 删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
- 这个是标准写法
- 成功
echo "备份数据库${DATABASE} 成功"
最终文件如下
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db
# 当前时间,使用函数获取 $()
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#echo $DATETIME
# 准备表示数据库的参数
# 数据库的地址,这里使用本地数据库
HOST=localhost
#数据库的用户名
DB_USER=root
#数据库的密码
DB_PWD=123456abcd
#备份的数据库名
DATABASE=db1
#创建备份目录,如果不存在,则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --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天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE} 成功"
2. 加入定时任务
cronttab -e
30 2 * * * sh /home/crispycandy/dbback.sh