定时任务备份Docker中MySQL数据库

 在个人学习和开发过程中,我们常常会遇到这样的问题:自己在服务器上搭建的数据库,由于没有专门的运维人员管理,一旦数据库崩溃或服务器到期,就会导致重要数据永久丢失。

 针对这种情况,我个人采用了一种简单有效的解决方案:​​定期将数据库备份并自动推送到 Gitee(码云)等代码托管平台​​。这样即使服务器出现问题,也能从远程仓库快速恢复数据,确保数据安全。

  1. 首先编辑脚本
bash 复制代码
#!/bin/bash

container_id="mysql"  #docker中的容器的id
sync_folder="/workspace/sync"  # git文件的根目录
today=$(date +%Y%m%d) #当前日期 20240203
databses=("db1" "db1") #数据库名称
user_name="数据库用户名"
password="数据库密码"
git_repository="git@gitee.com:xxxxxx/xxxx.git" #git地址 使用的是ssh免登录形式
git_branch="test" #git的分支 

echo "######################${today}######################"

#判断是否创建了今天年月日的文件夹,如果没有创建,就创建
if [ ! -d ${sync_folder}/${today} ]; then
  mkdir -p ${sync_folder}/${today}
  echo ">>>>>>>>>>>>>创建文件夹${sync_folder}/${today}"
fi

cd ${sync_folder}/${today}

#需要导出多个数据库,使用for循环
for db in ${databses[@]}; do
  docker exec ${container_id} mysqldump -u${user_name} -p${password} ${db} > ${db}.sql
  echo ">>>>>>>>>>>>>导出数据库${db}"
  #使用zip压缩
  zip -r ${db}.zip ${db}.sql
  echo ">>>>>>>>>>>>>压缩数据库${db}"
  #删除sql文件
  rm -f ${db}.sql
  echo ">>>>>>>>>>>>>删除数据库${db}"
done

echo ">>>>>>>>>>>>>切换到${sync_folder}"
cd ${sync_folder}

#将上面的文件夹中的新数据上传到git中
echo ">>>>>>>>>>>>>添加所有变更文件到git"
git add -A
echo ">>>>>>>>>>>>>提交所有变更文件到git"
git commit -m ${today}
echo ">>>>>>>>>>>>>拉取最新代码"
git pull ${git_repository} ${git_branch}
echo ">>>>>>>>>>>>>推送代码"
git push ${git_repository} ${git_branch}
echo ">>>>>>>>>>>>>上传完成"
  1. 编写定时任务
bash 复制代码
0 0 */3 * * /workspce/sync/sync_mysql.sh >> /workspce/logs/sync_mysql.log 2>&1

本文档以 ​​Docker 环境下的 MySQL 数据库​​ 为例进行说明。

如果您使用的是其他数据库(如 PostgreSQL、Oracle 等),本方案同样适用。

如需针对特定数据库定制 Shell 备份脚本,欢迎在下方评论区留言,我们将为您提供适配方案。

相关推荐
螺蛳粉 螺蛳粉4 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
幽灵诶5 小时前
Mysql(基于测试的学习)
数据库·mysql
宇宙无敌暴龙战士6665 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊5 小时前
MySQL 的四种隔离级别
java·数据库·mysql
PellyKoo7 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐7 小时前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
paopaokaka_luck8 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶8 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
阿标在干嘛9 小时前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器
GreatSQL10 小时前
GreatSQL 8.0回流MySQL 5.7主从复制中断分析排查过程
mysql