Docker容器mysql定时备份与恢复

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

备份

前置条件

  1. 在linux CentOs7中,Docker存在mysql容器
  2. 进入sql容器, =>mysql-server —> 容器名称
docker exec -it mysql-server /bin/bash   --进入容器中
  1. 需要编写脚本文件:
    • 安装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
    
  2. 需要设置定时任务:
    • 安装cron
    apt install cron  --安装cron
    

1. 编写脚本文件

存储结构:

  • /home
    • /databashbackup
      • /sql (目录:用于存储备份sql压缩文件)
      • /backup.sh (sh:数据库备份脚本)

在这里插入图片描述

  1. 创建sql目录
cd /home
mkdir -p databashbackup/sql
  1. 创建backup.sh 文件
cd /home/databashbackup
touch backup.sh
  1. 编写脚本文件
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脚本

2.设置定时任务

  1. 先查看定时任务
crontab -l
  1. 设置定时任务
crontab -e

在这里插入图片描述

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

00 11 * * * /home/databasebackup/backup.sh

在这里插入图片描述
cron定时相关规则可自行学习。

恢复

  1. 查看sql文件夹中的sql压缩文件
    在这里插入图片描述
  2. 解压.tar.gz文件
tar -zxvf 2023-07-27_091251.tar.gz

在这里插入图片描述
3. 进入解压出的目录,解压.gz

gzip -d 2023-07-27_091251.sql.gz

在这里插入图片描述
4. 登录sql

mysql -u root -p root
  1. 恢复数据库
source /home/databasebackup/sql/2023-07-27_091251/2023-07-27_091251.sql

以上就是本人亲身实践的过程了,希望能够帮到你!有什么不理解的欢迎私信问我!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wilihelmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值