前提
- mysql使用docker部署
- 有一个文件映射出来看备份文件(参数DOCKER_BACKUP文件夹要映射BACKUP文件夹)
- 使用crontab定时器自动执行
脚本
#!/bin/bash
# 备份目录
BACKUP=
# 当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
# 数据库的地址
HOST=
# 数据库的用户名
DB_USER=
# 数据库的密码
DB_PW=
# 备份的数据库名
DATABASE=
# 容器名称
DOCKER_DB_NAME=
# 容器备份目录
DOCKER_BACKUP=
# 保留备份天数
BACKUP_DAYS=
#创建备份目录 如果不存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
# 备份数据库
docker exec -i ${DOCKER_DB_NAME} sh -c "mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} > ${DOCKER_BACKUP}/${DATETIME}/$DATETIME.sql"
# 将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
# 删除备份文件
find ${BACKUP} -atime +${BACKUP_DAYS} -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库 ${DATABASE} 成功"
crontab定时器
chmod +x backup.sh # 给backup.sh执行权限
0 2 * * * /data/mysql/backup.sh # 每天凌晨2点执行backup.sh
数据恢复
mysql -uroot -p'123456' < /data/test.sql
注意:该操作会重新创建数据库,请谨慎操作