docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker MySQL数据库如何用crontab定时备份

Docker MySQL数据库如何用crontab定时备份?完整教程

作者:wilihelmi

数据库崩溃不用慌!本文手把手教你用Linux的crontab定时任务自动备份Docker中的MySQL数据库,包括备份脚本编写、定时设置和恢复步骤,确保数据安全无忧

在实际生产环境中遇到需要备份数据库,防止服务器或数据库崩溃数据损坏时,无法挽救的情况,我们可以利用Linux的定时任务crontab来自动的备份数据库。

备份

前置条件

在linux CentOs7中,Docker存在mysql容器

进入sql容器, =>mysql-server —> 容器名称

docker exec -it mysql-server /bin/bash   --进入容器中

需要编写脚本文件:

sudo apt-cache policy vim  --查看是否已安装
sudo apt-get install vim  --安装
sudo apt-cache policy vim  --再次查看,确定安装
vim /root/.vimrc  --编辑文件

插入以下内容:

syntax on
set fileencodings=ucs-bom,utf-8,utf-16,gbk,big5,gb18030,latin1
set fileencoding=utf-8

需要设置定时任务:

apt install cron  --安装cron

编写脚本文件

存储结构

/home

/databashbackup

创建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} 备份成功!"
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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文