Docker MySQL数据库如何用crontab定时备份?完整教程
作者:wilihelmi
数据库崩溃不用慌!本文手把手教你用Linux的crontab定时任务自动备份Docker中的MySQL数据库,包括备份脚本编写、定时设置和恢复步骤,确保数据安全无忧
在实际生产环境中遇到需要备份数据库,防止服务器或数据库崩溃数据损坏时,无法挽救的情况,我们可以利用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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
