shell定时备份数据库

发布时间 2023-07-27 22:30:17作者: Crispy·Candy

摘要

  • 讲解如何使用shell每天定时编写数据库

一、要求

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

提示,备份的命令为

mysqldump -uroot -p123456abcd --host=localhost -q -R --databases db1 > back.sql

其中:

  • root是用户名,123456abcd是密码
  • db1是数据库(备份的就是数据库)
  • > back.sql是将内容重定向至back.sql文件中,否则内容仅仅会在控制台打印

二、思路

首先编写shell

  1. 先写目录 /data/backup/db
  2. 然后获取时间 2021-03-12_230201
  3. 然后备份

二、步骤

1. 编写shell

  1. 首先获取时间
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db

# 当前时间,使用函数获取 $()
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME  # 可以测试一下

  1. 然后配置其他参数
# 准备表示数据库的参数,表示一个数据库也就用以下几个参数
# 数据库的地址,这里使用本地数据库
HOST=localhost
#数据库的用户名
DB_USER=root
#数据库的密码
DB_PWD=123456abcd
#备份的数据库名
DATABASE=db1
  1. 检测并创建目录
#创建备份目录,如果不存在,则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
  1. 备份数据库
#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} > back.sql
  1. 如果还想压缩的话,可以继续写
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME/${DATETIME}.sql.gz
  • gzip是压缩,然后重定向至文件
  1. 将文件转换成tar.gz
# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}

# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
  1. 删除10天前的备份文件
# 删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
  • 这个是标准写法
  1. 成功
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