Docker MySQL数据库如何用crontab定时备份?完整教程
在实际生产环境中遇到需要备份数据库,防止服务器或数据库崩溃数据损坏时,无法挽救的情况,我们可以利用Linux的定时任务crontab来自动的备份数据库。
备份
前置条件
在linux CentOs7中,Docker存在mysql容器
进入sql容器, =>mysql-server —> 容器名称
docker exec -it mysql-server /bin/bash --进入容器中
需要编写脚本文件:
- 安装vim:
sudo apt-cache policy vim --查看是否已安装 sudo apt-get install vim --安装 sudo apt-cache policy vim --再次查看,确定安装
- vim中文乱码:
vim /root/.vimrc --编辑文件
插入以下内容:
syntax on set fileencodings=ucs-bom,utf-8,utf-16,gbk,big5,gb18030,latin1 set fileencoding=utf-8
需要设置定时任务:
- 安装cron
apt install cron --安装cron
编写脚本文件
存储结构
/home
/databashbackup
- /sql (目录:用于存储备份sql压缩文件)
- /backup.sh (sh:数据库备份脚本)

创建sql目录
cd /home mkdir -p databashbackup/sql
创建backup.sh 文件
cd /home/databashbackup touch backup.sh
编写脚本文件
vim backup.sh
#!/bin/bash
#先指定备份路径
BACKUP=/home/databasebackup/sql(备份sql文件存放地址,可自定义)
#显示当前时间
DATATIME=$(date "+%Y-%m-%d_%H%M%S")
#运行数据库的主机IP地址(执行备份的主机和运行数据库的主机可能不是同一台,如果同一台填自己IP即可)
HOST=主机Ip地址(自己填)
#登录数据库的用户名
DB_USER=用户名(自己填)
#数据库该用户名的密码
DB_PW=密码(自己填)
#备份的数据库名(如需备份所有库,可参考下面步骤直接指定库名为 all)
DATABASE=all
#开始备份数据库提示语,仅提示作用,手动执行时方便判断到了哪一步
echo "开始备份数据库${DATABASE}"
#创建备份目录(如果指定的目录不存在,则新建目录,!-d不存在则成立,&&表示左端成立则执行右端动作)
[ ! -d ${BACKUP}/${DATATIME} ] && mkdir -p "${BACKUP}/${DATATIME}"
#sql操作:备份数据库
#备份数据库(这里我按项目实际情况指定all-databases,备份所有库)
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} --all-databases | gzip > ${BACKUP}/${DATATIME}/$DATATIME.sql.gz
#将文件压缩成 tar.gz
cd ${BACKUP}
tar -zcvf $DATATIME.tar.gz ${DATATIME}
#删除已备份的目录,由于压缩了文件,压缩前原有的可以删了
rm -rf ${BACKUP}/${DATATIME}
#结束备份数据库提示语,仅提示作用(!e如果该文件存在,则成立,||左端成立,则执行右端,建议加上这个条件,否则即使上面的数据库备份不成功,下面仍然会提示备份成功,这样就没法有效判断)
[ ! -e ${DATATIME}.tar.gz ] || echo "数据库${DATABASE}备份成功!"
#(可省略)
#推送到钉钉(这个步骤可省略,我根据项目需求想通过钉钉消息,就知道是否备份数据库。!-e数据库文件存在,则执行右端的python脚本,推送消息到钉钉群,钉钉脚本需要填写2个参数,1为用户名(>为了不@我,这里填1,也可填自己实际的钉钉号,这样钉钉机器人发消息就会@我), "DTcenter数据库${DATATIME} 备份成功!"为指定钉钉机器人发送的信息)
[ ! -e ${DATATIME}.tar.gz ] || ./dingding.py 1 test "DTcenter数据库${DATATIME} 备份成功!"
- 可以执行试试看,脚本文件有没有问题,没有问题会在sql目录下生成一个压缩文件
sh backup.sh --运行sh脚本
设置定时任务
- 先查看定时任务
crontab -l
- 设置定时任务
crontab -e

插入以下内容:表示每天中午11点会执行backup.sh脚本
00 11 * * * /home/databasebackup/backup.sh

cron定时相关规则可自行学习。
恢复
查看sql文件夹中的sql压缩文件

解压.tar.gz文件
tar -zxvf 2023-07-27_091251.tar.gz

进入解压出的目录,解压.gz
gzip -d 2023-07-27_091251.sql.gz

登录sql
mysql -u root -p root
恢复数据库
source /home/databasebackup/sql/2023-07-27_091251/2023-07-27_091251.sql
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Docker容器中Elasticsearch内存不足问题的排查与解决方案
在使用Docker运行Elasticsearch(ES)时,可能会遇到内存不足的问题,导致ES无法启动,以下是一次完整的排查和解决过程,需要的朋友可以参考下2025-08-08
Docker 和 Containerd 目录结构及存储机制详解
Docker和Containerd是两种流行的容器运行时工具,它们都有自己的目录结构和存储机制,本文详细介绍了Docker和Containerd的目录结构和存储机制,并对比了它们之间的主要区别,包括存储路径、挂载点管理、配置文件和日志文件,感兴趣的朋友一起看看吧2025-02-02
启动docker错误systemctl status docker.service问题及解决
文章讨论了启动Docker和执行docker ps命令失败的问题,但docker -v显示成功,解决办法包括在阿里云容器镜像中找到镜像加速器或使用公共镜像地址,默认情况下,Docker使用官方地址2025-01-01


最新评论