使用Docker定时备份数据

文章目录

  • 一、Docker镜像制作
  • 二、MySQL数据备份
  • 三、Minio数据备份
  • 四、数据跨服务器传输
  • 五、Nginx日志分割
  • 六、Docker启动
  • 七、Docker备份日志


一、Docker镜像制作

  • 镜像制作目录
    在这里插入图片描述
  • mc下载地址
    在这里插入图片描述 - rsyncd.conf
# https://download.samba.org/pub/rsync/rsyncd.conf.5port 873
uid = nobody
gid = nobody
use chroot = yes
max connections = 5
syslog facility = local5
pid file = /var/run/rsyncd.pid
read only = true[backup]
path = /home/backup
  • root
# min   hour    day     month   weekday command
0       *       *       *       *       run-parts /home/1hour
0       0       *       *       *       run-parts /home/0Hday
0       1       *       *       *       run-parts /home/1Hday
0       2       *       *       *       run-parts /home/2Hday
0       3       *       *       *       run-parts /home/3Hday
0       5       *       *       *       run-parts /home/5Hday
0       4       *       *       6       run-parts /home/1week
  • Dockerfile
FROM alpine:3.19.1
WORKDIR /homeCOPY root /var/spool/cron/crontabs/root
COPY rsyncd.conf /home
COPY mc /home
RUN chmod +x mcRUN mkdir 1hour && mkdir 0Hday && mkdir 1Hday && mkdir 2Hday && mkdir 3Hday && mkdir 5Hday && mkdir 1week
RUN echo "http://mirrors.aliyun.com/alpine/v3.19/community" > /etc/apk/repositories
RUN echo "http://mirrors.aliyun.com/alpine/v3.19/main" >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk --no-cache add bash mysql-client rsync tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
  • 镜像制作
cd /home/dockerimg/crontab
docker build --tag crontab:1.0 .

二、MySQL数据备份

  • backup-data-mysql.sh
#!/bin/shlog_save_days=30						# 备份日志保留几天
log_path=/home/logs						# 备份日志路径
log_file=backup-data-mysql.log			# 备份日志名称data_path=/home/backup/mysql			# 备份路径
data_dir=$(date +%Y%m)					# 备份数据目录
mysql_path=/home/mysql/data				# mysql-bin.*日志存放目录
mysql_bin=mysql-bin.index				# mysql-bin.index位置
mysql_addr=192.168.1.6					# mysql地址
mysql_port=3306							# mysql端口
mysql_user=root							# mysql用户名
mysql_password=12345678					# mysql密码data_dir_before=$(date -d@"$(( `date +%s`-86400))" +"%Y%m")
mkdir -p /home/crontab/logs
mkdir -p $data_path/$data_dir
mkdir -p $data_path/$data_dir_beforeecho `` >> $log_path/$(date +%Y%m)-$log_file
echo "备份开始时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_file
mysqladmin -h$mysql_addr -P$mysql_port -u$mysql_user -p$mysql_password flush-logs
count=`wc -l $mysql_path/$mysql_bin |awk '{print $1}'`
num=0
for file in `cat $mysql_path/$mysql_bin`
dobase=`basename $file`num=`expr $num + 1`if [ $num  -ne $count ] && (! test -e $data_path/$data_dir/$base.log.gz) && (! test -e $data_path/$data_dir_before/$base.log.gz)thengzip -c $mysql_path/$base > $data_path/$data_dir/$base.log.gzecho "备份: "$data_path/$data_dir/$base.log.gz >> $log_path/$(date +%Y%m)-$log_filefi
done
echo "备份结束时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_filefind $log_path -type f -name "*$log_file" -mtime +$log_save_days -exec rm -rf {} \;

三、Minio数据备份

  • backup-data-minio.sh
#!/bin/shlog_save_days=30						# 备份日志保留几天
log_path=/home/logs						# 备份日志路径
log_file=backup-data-minio.log			# 备份日志名称data_path=/home/backup/minio			# 备份路径
data_dir=$(date +%Y%m)					# 备份数据目录
minio_dir=$(date +%Y%m%d)				# minio存储 月 $(date +%Y%m) 天 $(date +%Y%m%d)
minio_addr=http://192.168.1.6:9000		# minio地址
minio_user=admin						# minio用户名
minio_password=123456					# minio密码
minio_bucket=bucket						# minio桶名称mkdir -p /home/crontab/logs
mkdir -p $data_path/$data_dir
mkdir $data_path/$data_dir/tmpecho `` >> $log_path/$(date +%Y%m)-$log_file
echo "备份开始时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_file
/home/mc alias set minio_backup $minio_addr $minio_user $minio_passwordminio_bucket=test
/home/mc cp --recursive minio_backup/$minio_bucket/$minio_dir $data_path/$data_dir/tmp
cd $data_path/$data_dir/tmp
tar -zcf $data_path/$data_dir/$minio_bucket-$minio_dir.tar.gz *
rm -rf $data_path/$data_dir/tmp
echo "备份: "$data_path/$data_dir/$minio_bucket-$minio_dir.tar.gz  >> $log_path/$(date +%Y%m)-$log_fileecho "备份结束时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_filefind $log_path -type f -name "*$log_file" -mtime +$log_save_days -exec rm -rf {} \;

四、数据跨服务器传输

  • crondbase.sh
#!/bin/shcrond -f -l 8
  • cronddata.sh
#!/bin/shrsync --daemon --config=/home/rsyncd.conf
crond -f -l 8
  • rsyncd.secrets
root:password
  • backup-data-copy.sh
#!/bin/sh
# 只传输变化部分、支持断点续传、同步服务器都需要安装rsynclog_save_days=30						# 日志保留几天
log_path=/home/logs						# 日志路径
log_file=backup-data-copy.log			# 日志名称echo `` >> $log_path/$(date +%Y%m)-$log_file
echo "数据传输开始时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_file
rsync -avzP --password-file=/home/rsyncd.secrets root@192.168.6.12::backup /home/backup
echo "数据传输结束时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_filefind $log_path -type f -name "*$log_file" -mtime +$log_save_days -exec rm -rf {} \;

五、Nginx日志分割

#!/bin/shlog_save_days=30					# 备份日志保留几天
log_path=/home/logs					# 备份日志路径
log_file=backup-log-nginx.log		# 备份日志名称data_save_days=60					# 备份保留几天
data_path=/home/nginx/logs			# 备份路径mkdir -p /home/crontab/logs
mkdir -p /home/nginx/logs/access
mkdir -p /home/nginx/logs/errorecho `` >> $log_path/$(date +%Y%m)-$log_file
echo "备份开始时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_file
for item in "access" "error"
dogzip -c $data_path/$item.log > $data_path/$item/$(date -d@"$(( `date +%s`-3600))" +"%Y-%m-%d")_$item.log.gzecho "备份: "$data_path/$item/$(date -d@"$(( `date +%s`-3600))" +"%Y-%m-%d")_$item.log.gz >> $log_path/$(date +%Y%m)-$log_filerm -rf $data_path/$item.log && touch $data_path/$item.log
done
find $data_path/$item -type f -name "*.gz" -mtime +$data_save_days -exec rm -rf {} \;echo "备份结束时间: "$(date +%F%n%T) >> $log_path/$(date +%Y%m)-$log_filefind $log_path -type f -name "*$log_file" -mtime +$log_save_days -exec rm -rf {} \;

六、Docker启动

  • /home/docker/crontab
    在这里插入图片描述

  • 数据库服务器
    docker-crontab-data.yaml

version: "3"services:crontab:image: "crontab:1.0"restart: alwayscontainer_name: ser-crontabhostname: crontabports:- 873:873networks:- apphostenvironment:TZ: "Asia/Shanghai"volumes:- /home/docker/crontab/backup-log-nginx.sh:/home/0Hday/backup-log-nginx.sh- /home/docker/crontab/backup-data-mysql.sh:/home/1Hday/backup-data-mysql.sh- /home/docker/crontab/backup-data-minio.sh:/home/2Hday/backup-data-minio.sh- /home/docker/crontab/cronddata.sh:/home/command.sh- /home/backup:/home/backup- /home/docker/logs:/home/logs- /home/nginx/logs:/home/nginx/logs- /home/mysql/data:/home/mysql/datacommand: >sh -c "/home/command.sh"networks:apphost:
  • 数据备份服务器
    docker-crontab-base.yaml
version: "3"services:crontab:image: "crontab:1.0"restart: alwayscontainer_name: ser-crontabhostname: crontabnetworks:- apphostenvironment:TZ: "Asia/Shanghai"volumes:- /home/docker/crontab/backup-log-nginx.sh:/home/0Hday/backup-log-nginx.sh- /home/docker/crontab/backup-data-copy.sh:/home/3Hday/backup-data-copy.sh- /home/docker/crontab/rsyncd.secrets:/home/rsyncd.secrets- /home/docker/crontab/crondbase.sh:/home/command.sh- /home/backup:/home/backup- /home/docker/logs:/home/logs- /home/nginx/logs:/home/nginx/logscommand: >sh -c "/home/command.sh"networks:apphost:
  • 数据库服务器启动
mkdir -p /home/docker/crontab && mkdir -p /home/docker/logs
cd /home/docker/crontab && chmod 777 *.* && chmod 600 rsyncd.secrets
docker-compose -f /home/docker/crontab/docker-crontab-data.yaml -p crontab up -d
  • 数据备份服务器启动
mkdir -p /home/docker/crontab && mkdir -p /home/docker/logs
cd /home/docker/crontab && chmod 777 *.* && chmod 600 rsyncd.secrets
docker-compose -f /home/docker/crontab/docker-crontab-base.yaml -p crontab up -d

七、Docker备份日志

  • /home/docker/logs/202404-backup-data-copy.log
数据传输开始时间: 2024-04-12 03:00:00
数据传输结束时间: 2024-04-12 03:00:00
  • /home/docker/logs/202404-backup-log-nginx.log
备份开始时间: 2024-04-12 00:00:00
备份: /home/nginx/logs/access/2024-04-11_access.log.gz
备份: /home/nginx/logs/error/2024-04-11_error.log.gz
备份结束时间: 2024-04-12 00:00:00
  • /home/docker/logs/202404-backup-data-minio.log
备份开始时间: 2024-04-12 02:00:00
备份: /home/backup/minio/202404/test-20240412.tar.gz
备份结束时间: 2024-04-12 02:00:00
  • /home/docker/logs/202404-backup-data-mysql.log
备份开始时间: 2024-04-12 01:00:00
备份: /home/backup/mysql/202404/mysql-bin.000041.log.gz
备份结束时间: 2024-04-12 01:00:03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/307086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程桌面防火墙是什么?

远程桌面防火墙,是一种针对远程桌面应用的安全防护工具。它可以在保证远程桌面连接的便利性和高效性的对网络连接进行安全性的保护,防止未经授权的访问和潜在的安全风险。 远程桌面防火墙的主要功能是对远程桌面连接进行监控和管理。它通过识别和验证连接…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题2

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题2 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…

一起学习python——基础篇(18)

上一篇讲述了python中文件夹和文件的检测有无判断、文件夹和文件的创建、文件写入一些内容的方法、文件夹和文件的删除。 这一篇来说一下python的如何读取文件内容。 #文件的路径 testPath"D:/pythonFile/test.txt" #使用open方法,参数为r:表…

C++ 类和对象 上

目录 前言 什么是面向对象?什么是面向过程? 面向过程 面向对象 比较 类 引入 定义 实例化 类的大小 this指针 前言 今天我们来进入C类和对象的学习。相信大家一定听说过C语言是面向过程的语言,而C是面向对象的语言?那么他…

Android 纵向双选日历

这个日历的布局分两部分&#xff0c;一部分是显示星期几的LinearLayout&#xff0c;另外就是一个RecyclerView&#xff0c;负责纵向滚动了。 工具类&#xff1a; implementation com.blankj:utilcode:1.17.3上activity_calendar代码&#xff1a; <?xml version"1.0&…

【CSS面试题】Flex实现九宫格

考察知识&#xff1a; flex布局 水平垂直居中的实现 初始效果 代码关键&#xff1a;给父盒子添加以下属性 flex-wrap: wrap; /* 允许换行 */justify-content: space-around; /* 主轴对齐方式 */align-content: space-around; /* 多行在侧轴上的对齐方式 */<!DOCTYPE html&…

关于阿里云centos系统下宝塔面板部署django/中pip install mysqlclient失败问题的大总结/阿里云使用oss长期访问凭证

python版本3.12.0 项目的版本依赖 问题1 解决方案 sudo vim /etc/profile export MYSQLCLIENT_CFLAGS"-I/usr/include/mysql" export MYSQLCLIENT_LDFLAGS"-L/usr/lib64/mysql" Esc退出编辑模式 &#xff1a;wq退出并且保存 问题二 说是找不到 mysql.h头…

大数据入门之如何利用Phoenix访问Hbase

在大数据的世界里&#xff0c;HBase和Phoenix可谓是一对黄金搭档。HBase以其高效的列式存储和强大的数据扩展能力&#xff0c;成为大数据存储领域的佼佼者&#xff1b;而Phoenix则以其SQL化的操作方式&#xff0c;简化了对HBase的访问过程。今天&#xff0c;就让我们一起看看如…

LC 515.在每个树行中找最大值

515. 在每个树行中找最大值 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3] 提示&#xff1a; 二叉树的节点个数的范围是…

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇8基于stm32的RFID校园门禁系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -----------…

【SVN】clean up报错:Cleanup failed to process the following paths 解决方法

报错来源&#xff1a;代码更新有一个文件既不能接受自己的也不能接受别人的&#xff0c;只能取消&#xff0c;再提交提醒clean up&#xff0c;随后报标题错误。 解决方法&#xff1a;参考https://www.cnblogs.com/pinpin/p/11395438.html 注&#xff1a;如果clean up的时候有…

Python(10):常见的4种设计模式(单例/工厂/策略/观察者)

文章目录 一、单例模式二、工厂模式三、策略模式四、观察者模式 程序中设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案&#xff0c;这些解决方案是众多软件按开发人员经过相当长的一段时间的实验和错误总结出来的。使用设计模式是为了重用代码、让代码更容易…

SSL数字证书

SSL数字证书产品提供商主要来自于国外&#xff0c;尤其是美国&#xff0c;原理和使用操作系统一样&#xff0c;区别在于SSL数字证书目前无法替代性&#xff0c;要想达到兼容性99%的机构目前全球才3-4家&#xff0c;目前国内的主流网站主要使用的是国际证书&#xff0c;除了考虑…

文章分享:《二代测序临床报告解读指引》

&#xff3b;摘要&#xff3d; 二代测序&#xff08;next generation sequencing&#xff0c;NGS&#xff09;已成为中国临床肿瘤医生常用检测工具&#xff0c;而中国超 90%临床医生需要 NGS 报告解读支持。因此&#xff0c;为提升临床医生 NGS 报告解读能力&#xff0c;特编写…

django基于python的法院执法案件管理系统

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中&#xff0c;方便对数据进行操作本课题基于WEB的开发平台&#xff0c;设计的基本思路是&#xff1a; 框架&#xff1a;django/flask 后端&#xff…

AWE2024酷开科技智能家居,让生活从此更智能!

随着科技的飞速发展&#xff0c;智能家居已经成为了人们生活中不可或缺的一部分。在这个领域里&#xff0c;酷开科技品类逐渐丰富&#xff0c;在AWE2024展会上展现出耀眼光芒&#xff0c;将全品类智能家电新品集结亮相&#xff01;让人们的生活更加便捷、舒适和智能化。 酷开K…

C++的stack和queue类(三):适配所有容器的反向迭代器

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类&#xff1a; 单向&#xff1a;forward_list双向&#xff1a;list随机&#xff1a;vector / deque 迭代器按功能分类&#xff1a; 正向反向const list的反向迭代器…

elementUI 下拉框加提示文案

效果如下&#xff1a; 展示文案在最下面&#xff0c;跟选项有个分割线 <el-select v-model"value" placeholder"请选择" clearable popper-class"addNotice" class"addNoticeS" visible-change"(v) >selectNotice(v,展示…

独一无二:探索单例模式在现代编程中的奥秘与实践

设计模式在软件开发中扮演着至关重要的角色&#xff0c;它们是解决特定问题的经典方法。在众多设计模式中&#xff0c;单例模式因其独特的应用场景和简洁的实现而广受欢迎。本文将从多个角度详细介绍单例模式&#xff0c;帮助你理解它的定义、实现、应用以及潜在的限制。 1. 什…

书生·浦语大模型实战营 | 第3次学习笔记

前言 书生浦语大模型应用实战营 第二期正在开营&#xff0c;欢迎大家来学习。&#xff08;参与链接&#xff1a;https://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqg 第三堂课的视频链接&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/ 本次笔记是学习完第三堂课…