当前位置: 首页 > news >正文

使用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

相关文章:

使用Docker定时备份数据

文章目录 一、Docker镜像制作二、MySQL数据备份三、Minio数据备份四、数据跨服务器传输五、Nginx日志分割六、Docker启动七、Docker备份日志 一、Docker镜像制作 镜像制作目录 mc下载地址 - rsyncd.conf # https://download.samba.org/pub/rsync/rsyncd.conf.5port 873 uid …...

conda搭建与管理python环境

conda搭建与管理python环境.md Anaconda下载地址Miniconda下载地址Linux下安装1.执行安装2.查看可安装的python版本3.创建环境4.激活环境5.安装python的工具包5.退出环境6.删除指定的环境7.设置默认的环境 Window下安装1.执行安装2.配置环境变量3.检查是否安装成功4.通过conda配…...

获取当前的年、月、日、时、分、秒,并将这些信息用作保存 Excel 文件的前缀

要获取当前的年、月、日、时、分、秒,并将这些信息用作保存 Excel 文件的前缀,你可以使用 Python 的 datetime 模块来获取当前时间,并格式化时间字符串,然后使用 pandas 库将数据保存为 Excel 文件。示例代码: from d…...

Gitlab全量迁移

Gitlab全量迁移 一、背景1.前提条件 一、背景 公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上。Gitlab官方推荐了先备份然后再恢复的方法。个人采用官方的另外一种方法,就写这篇文章给需要的小伙伴参考。 源Gitlab: http://old.mygitlab.com #地…...

Golang ProtoBuf 初学者完整教程:语法

一、编码规范推荐 1、文件名使用小写下划线的命名风格,例如 lower_snake_case.proto 2、使用 2 个空格缩进 3、包名应该和目录结构对应 4、消息名使用首字母大写驼峰风格(CamelCase),例如message StudentRequest { ... } 5、字段名使用小写下划线的风格…...

使用.cc域名的优势

域名注册越来越难了,很多人选择结尾加123、56、365等等数字,总感觉怪怪的。那么能不能选择其他后缀的域名呢?我感觉可以,大部分用户都不会去看域名,只有做技术的会去关注。 使用.cc域名的优势 很多好域名,…...

存储器管理单元MMU概述

在ARM系统中,存储器管理单元MMU主要完成以下工作: ● 虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。页…...

了解监控易(25):网络拓扑管理,可视化监控网络,快速定位问题

在复杂的网络环境中,快速准确地定位问题、确保网络的稳定运行是至关重要的。监控易的网络拓扑管理功能,正是为了解决这一问题而设计的。该功能通过可视化监控网络,帮助用户迅速把握网络整体状况,快速定位并解决问题。 监控易的网络…...

C#学习笔记10:winform上位机与西门子PLC网口通信_中篇_winform的窗口操作设计、日志的添加使用

今日继续我的C#winform上位机学习之路 这系列笔记的目标是尝试编写一个能够与西门子PLC进行以太网口通信的上位机软件。 文章提供完整代码解释、设计点解释、测试效果图、完整工程下载 本章主要学习:Winform多个窗体的一些操作 、无边框窗体的创建、Combox组件插…...

第14章 大数据与数据科学知识点梳理

第14章 大数据与数据科学知识点梳理(附带页码) ◼ 原则:组织应仔细管理与大数据源相关的元数据,以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据:数据量大(Volume)、数据更新…...

FHE全同态加密简介

1. 何为FHE? FHE (Fully homomorphic encryption): 是一种隐私技术,支持直接对密文进行计算,而无需对密文先解密再计算。即,任何第三方或云厂商,都可对敏感信息的密文进行处理,而无需访问密文内…...

【vue】跨组件通信--依赖注入

import { provide,inject } from vue provide&#xff1a;将父组件的数据传递给所有子组件&#xff08;子孙都有&#xff09;inject&#xff1a;接收provide 项目文件结构 App.vue是Header.vue的父组件&#xff0c;Header.vue是Nav.vue的父组件 传值过程 App.vue <tem…...

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案&#xff0c;实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念&#xff1a; 1. **ARITest**&#xff1a; ARITest 是一款功能全面的自动化测试工具&#xff0c;提供 UI 自动化、接口自…...

Problem #7 [Medium]

This problem was asked by Facebook. Given the mapping a = 1, b = 2, … z = 26, and an encoded message, count the number of ways it can be decoded. For example, the message ‘111’ would give 3, since it could be decoded as ‘aaa’, ‘ka’, and ‘ak’. Y…...

MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接

LiuJinTao&#xff1a; 2024年4月14日 文章目录 MySQL的安装配置1. 下载2. 安装 三、 MySQL 启动与停止1. 第一种 方式&#xff1a;2. 第二种方式&#xff1a; 四、MySQL 客户端连接2. 方式二&#xff1a; MySQL的安装配置 1. 下载 官方下载网址&#xff1a;https://www.mysq…...

vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架

vue3vant自动导入pinavitejspnpm搭建项目框架 文章目录 vue3vant自动导入pinavitejspnpm搭建项目框架1. 安装pnpm&#xff08;如果还没有安装&#xff09;&#xff1a;2. 创建项目目录并进入该目录&#xff1a;3. 初始化项目&#xff1a;4. 安装Vite作为构建工具&#xff1a;5.…...

使用 Axios 处理 AxiosError 的三种常见方法

在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…...

linux上安装Tomcat

安装Tomcat 安装JDK https://www.oracle.com/java/technologies/downloads/#license-lightbox mkdir -p /usr/java tar xf jdk-11.0.22_linux-x64_bin.tar.gz ln -sv /usr/java/jdk /usr/java/jdk-11.0.22配置环境变量&#xff1a; cat > /etc/profile.d/java.sh <&…...

Ubuntu20.04安装ROS过程记录以及常见报错处理

官网安装步骤如下&#xff1a; http://wiki.ros.org/cn/noetic/Installation/Ubuntu#A.2BXwBZy1uJiMU- 第一个&#xff1a;添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-la…...

PaddleOCR 图片日期识别

目录 一 . 获取图片信息种对应坐标区域日期信息 &#xff08;类型为1&#xff1a;http链接 类型为 2本地图片路径&#xff09; 二 . ocr图片识别日期信息获取&#xff0c;调用获取图片区域相应位置方法 三 . 如有所需获取rtsp流回放格式 四 . 完整代码如下 &#xff08…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

OpenGL-什么是软OpenGL/软渲染/软光栅?

‌软OpenGL&#xff08;Software OpenGL&#xff09;‌或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式&#xff08;包括几何处理、光栅化、着色等&#xff09;&#xff0c;不依赖GPU硬件加速。这种模式通常性能较低&#xff0c;但兼容性极强&#xff0c;常用于不支持硬件加速…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...