编写备份MySQL 脚本

目录

环境准备

增量备份

增量备份和差异备份

完整代码如下

测试脚本是否正常

星期天运行脚本(完全备份)

星期一运备份脚本(增量备份)

星期二备份数据(其他天--增量备份)

星期三备份数据(差异备份)


使用第三方工具percona-xtrabackup


基于Innobackupex的MySQL备份脚本

环境准备

  • 操作系统: Linux(CentOS 7.9)。
  • MySQL: 已安装并运行着MySQL 5.7.35。
  • Innobackupex: Percona XtraBackup套件的一部分,用于物理备份InnoDB和MyISAM表。
  • Shell脚本: 将编写的自动化脚本。

增量备份


具体要求:

1、周日全备
2、周一至周六增量备份
3、备份使用backup用户

标题:自动化的MySQL数据库备份策略:结合Shell脚本与Innobackupex的实践

引言

在现代数据驱动的世界里,定期备份数据库是维护业务连续性和数据安全不可或缺的一环。本文将介绍一种利用Shell脚本和Percona XtraBackup工具中的innobackupex命令来实现MySQL数据库自动化备份的策略。我们的目标是设置一个灵活的备份计划,其中周日执行全量备份,而其他日子则执行增量备份,从而高效地管理存储空间并加快恢复速度。

Shell脚本详解

首先,让我们深入理解所提供的脚本。该脚本主要包含以下几个部分:

日期变量设置:

whichday=$(date +%u)  # 获取当前是一周中的第几天(1-7)
today=$(date +%F)     # 设置今日日期格式为YYYY-MM-DD
yesterday=$(date -d '-1 day' +%F)  # 计算昨日日期
Login='--user=backup --password=Openlab123! --no-timestamp'  # 定义备份用户认证信息

定义备份功能:

  • FULL(): 执行全量备份,使用innobackupex命令,备份保存到/db/full_YYYY-MM-DD目录。
  • INCR(): 执行增量备份,需要指定基于哪个目录的增量,这里使用前一天的全量或增量备份作为基础。

逻辑判断:

  • 如果今天是周日 (whichday 等于7),执行FULL()函数,创建全量备份。
  • 如果今天是周一 (whichday 等于1),执行INCR()函数,基于上周日的全量备份进行增量备份。
  • 其他日子,同样执行INCR()函数,但基于前一天的增量备份。

脚本执行与监控

  • 执行脚本: 将上述脚本保存为可执行文件,例如inno_bak.sh,并通过cron定时任务在每天的固定时间执行。
  • 日志与监控: 确保innobackupex的执行过程中产生的日志得到妥善保存和监控,以便于及时发现并解决问题。

注意事项

  • 权限与安全性: 确保用于备份的用户具有足够的权限,同时注意保护好备份脚本中的敏感信息,比如数据库用户名和密码。
  • 备份验证: 定期检查备份文件的完整性和可恢复性,避免灾难发生时才发现备份不可用。

完整代码:

#!/bin/bash# 获取今天是一周中的第几天,1代表星期一,7代表星期日
whichday=$(date +%u)# 获取今天的日期,格式为YYYY-MM-DD
today=$(date +%F)# 计算并获取昨天的日期
yesterday=$(date -d '-1 day' +%F)# 设置备份时使用的MySQL登录信息,包括用户名、密码及不使用时间戳的选项
Login='--user=backup --password=Openlab123! --no-timestamp'# 定义函数:执行全量备份
function FULL()
{# 使用innobackupex命令执行全量备份,备份存放路径包含今天的日期innobackupex ${Login}  /db/full_${today}
}# 定义函数:执行增量备份
function INCR()
{# 使用innobackupex命令执行增量备份,指定增量备份的存储路径和基于哪个目录的增量innobackupex --incremental ${Login} /db/incr_${today} --incremental-basedir=$1
}# 根据今天是周中的哪一天来决定执行哪种备份
if [ ${whichday} -eq 7 ]  # 如果是周日
thenFULL               # 执行全量备份
elif [ ${whichday} -eq 1 ]  # 如果是周一
thenINCR /db/full_${yesterday}  # 执行增量备份,基于上周日的全量备份
elseINCR /db/incr_${yesterday}  # 其他日子执行增量备份,基于前一天的增量备份
fi

[root@localhost db] ls  --检查要备份的目录是否有文件存在

 要想进行增量备份的前提是要有一次完全备份

先从周天开始

[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 02日 星期日 00:00:05 CST# 该命令的目的是通过Shell脚本调整系统当前时间到明天的同一时刻。
# 为了实现这个目的,采用了两步走的策略:
# 第一步,计算明天的日期和当前时间;
# 第二步,使用计算出的日期时间设置系统时钟。# 1. 使用 'date -d '+1 day'' 计算明天的日期:
#    - `date -d`: 是date命令中的一个选项,允许我们指定一个相对时间字符串来计算新的日期和时间。
#    - `'+1 day'`: 指定了时间偏移量,即从当前时间起加1天,用来计算明天的日期。# 2. 结合 '%F %T' 格式化输出日期和时间:
#    - `'%F'`: 代表完整的日期格式,即年-月-日(例如,2024-06-02)。
#    - `'%T'`: 代表时间格式,即小时:分钟:秒(例如,00:00:05)。
#    这意味着我们不仅需要明天的日期,还需要保持当前的时间部分不变。# 3. 使用命令替换(命令嵌套):
#    - `$(...)` 是命令替换结构,它允许我们把一个命令的输出作为另一个命令的参数。
#    在这里,我们用明天的日期和时间(由内部的date命令计算得出)作为外部date命令的参数。# 4. 最终执行 'date -s' 设置系统时间:
#    - `date -s`: 用于设置系统时间的选项,后面跟具体的日期和时间字符串。
#    - 通过前面的命令替换,我们现在有了一个精确的日期时间字符串(明天的日期加上当前时间),
#      并将其传递给这个选项,从而实现设置系统时间为明天相同时间的目的。# 综上所述,整个命令的作用是将当前系统时间设置为明天此刻的时间,即在不影响当前时间的情况下,将日期向前推进一天。

运行脚本

查看是否成功备份

[root@localhost db] ls
full_2024-06-02

更改时间为星期一

[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 03日 星期一 00:02:42 CST#再次运行脚本
[root@localhost script] bash inno_bak.sh 
full_2024-06-02  incr_2024-06-03#星期二
[root@localhost script]# date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 04日 星期二 00:31:40 CST[root@localhost db]# ls
full_2024-06-02  incr_2024-06-03  incr_2024-06-04

增量备份和差异备份

要求二:

周日完全备份
    周1-2增量备份
    周3差异备份
    周4-6增量备份

# 备份脚本
[root@localhost script] cp inno_bak.sh inno_bak_v2.sh
[root@localhost script] vim inno_bak_v2.sh

完整代码如下

判断语句改为case语句,因为是同一个变量判断不同值

#!/bin/bash# 获取今天是一周中的第几天,1表示星期一,7表示星期日
whichday=$(date +%u)# 获取今天的日期,格式为YYYY-MM-DD
today=$(date +%F)# 计算并获取昨天的日期
yesterday=$(date -d '-1 day' +%F)# 设置数据库备份时使用的登录信息,包括用户名、密码以及禁用时间戳的选项
Login='--user=backup --password=Openlab123! --no-timestamp'# 定义全量备份函数
function FULL() {# 使用innobackupex执行全量备份到/db目录下以今天的日期为名称的子目录中innobackupex ${Login} /db/full_${today}
}# 定义增量备份函数,需要传入上次备份的目录作为增量基础
function INCR() {# 执行增量备份到/db目录下以今天的日期为名称的子目录中,并指定增量的基准目录innobackupex --incremental ${Login} /db/incr_${today} --incremental-basedir=$1
}# 根据今天是一周中的哪一天来选择执行相应的备份操作
case ${whichday} in7) # 如果是周日FULL    # 执行全量备份;;1) # 如果是周一INCR /db/full_${yesterday}  # 执行基于上周日全量备份的增量备份;;3) # 如果是周三INCR /db/full_$(date -d '-3 day' +'%F')  # 执行基于上上周五全量备份的增量备份;;*) # 其他日子INCR /db/incr_${yesterday}  # 执行基于前一天增量备份的增量备份;;
esac

该脚本设计了一套策略来自动执行MySQL数据库备份:

周日:执行一次全量备份,这是一周的起始点,为后续的增量备份提供基础。

周一:执行基于上周日全量备份的增量备份。

周三:特殊调整,执行基于上上周五的全量备份的增量备份,这个设定可能根据特定的业务需求或备份窗口制定。

其余日子:执行基于前一天增量备份的增量备份,保持每天的数据变化得到记录。

测试脚本是否正常

星期天运行脚本(完全备份)

# 设置时间
[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 02日 星期日 01:09:02 CST
# 删除之前备份的数据
[root@localhost script] rm -rf /db/
[root@localhost script] bash inno_bak_v2.sh # 查看是否备份成功
[root@localhost script] ls /db/
full_2024-06-02

星期一运备份脚本(增量备份)

增加数据

mysql> insert into aa(id) values(11);
Query OK, 1 row affected (0.00 sec)mysql> select * from aa;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
|    8 |
|    9 |
|   10 |
|   11 |
+------+
# 设置时间
[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 03日 星期一 01:18:10 CST# 运行脚本
[root@localhost script] bash inno_bak_v2.sh# 检查是否备份成功
[root@localhost script] ls /db/
full_2024-06-02  incr_2024-06-03

星期二备份数据(其他天--增量备份)

增加数据

mysql> insert into aa(id) values(12);
Query OK, 1 row affected (0.00 sec)

运行脚本

# 设置时间
[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 04日 星期二 01:22:29 CST# 运行脚本
[root@localhost script] bash inno_bak_v2.sh# 查看是否备份成功
[root@localhost script] ls /db/
full_2024-06-02  incr_2024-06-03  incr_2024-06-04

星期三备份数据(差异备份)

增加数据

mysql> insert into aa(id) values(13);
Query OK, 1 row affected (0.00 sec)

运行脚本

# 设置时间
[root@localhost script] date -s "$(date -d '+1 day' +'%F %T')"
2024年 06月 05日 星期三 01:25:39 CST# 运行脚本
[root@localhost script] bash inno_bak_v2.sh# 查看脚本是否备份成功
[root@localhost script] ls /db/
full_2024-06-02  incr_2024-06-03  incr_2024-06-04  incr_2024-06-05

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

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

相关文章

最大连续1 的个数Ⅲ(滑动窗口)

题目: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。 首先,我们需要了解题干的意思:我们需要将给定的一个只有 0 和 1 的数组,最多将其中 k 个0改变…

EVASH vs. ATMEL vs. ST EEPROM 对比型号

EVASH vs. ATMEL vs. ST EEPROM 对比 型号对比 益华世ATMELSTEV24C128AAT24C128M24128EV24C256AAT24C256M24256EV24C512AAT24C512M24512 优势和劣势对比 品牌优势劣势EVASH- 供应链稳定性: 新兴品牌&#xff0c;可能在芯片市场紧缺的情况下提供较为稳定的供应。<br>- …

【强烈推荐】四元数与三维旋转

目录 1 强烈推荐讲解四元数与三维旋转的这篇文章&#xff0c;深入浅出2 笔记2.1 复数2.1.1 复数的定义2.1.2 复数的乘法与二维旋转 2.2 三维空间中的旋转2.2.1 角轴2.2.2 旋转的分解 2.3 四元数2.3.1 四元数的定义2.3.2 四元数的乘法2.3.3 四元数与三维旋转2.3.4 三维旋转的矩阵…

selenium自动化测试入门:下拉框元素定位

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 选择获取反选下拉框元素首先要实例化select元素 from selenium.webdriver.support.ui import S…

数字影像产业园的三大赋能:科技、创新与无限可能

数字影像产业园作为文创产业的重要载体&#xff0c;以科技为核心驱动力&#xff0c;不断推动产业的技术革新和升级。 园区内汇聚了最前沿的数字技术资源&#xff0c;高清摄影设备、虚拟现实技术、人工智能应用等尖端科技在这里得到广泛应用&#xff0c;不仅提升了生产效率&…

能源SCI期刊,中科院4区,审稿快,IF=3.858

一、期刊名称 Frontiers in Energy Research 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;能源 影响因子&#xff1a;3.858 中科院分区&#xff1a;4区 三、期刊征稿范围 能源研究前沿出版了整个领域的严格同行评审研究&#xff0c;重点是可持续和环境…

java多线程原理

1.线程创建与启动&#xff1a;通过继承Thread类或实现Runnable接口创建线程&#xff0c;并调用start()方法启动线程。 1.线程状态&#xff1a;线程在其生命周期中有多种状态&#xff0c;包括新建、运行、阻塞、死亡等。了解这些状态以及如何在它们之间转换对于管理线程至关重要…

ICLR 2024 BACKDOOR FEDERATED LEARNING BY POISONING BACKDOOR-CRITICAL LAYERS

寻找后门攻击最有效的网络层。现有的 FL 攻击和防御方法通常关注整个模型。 他们都没有认识到后门关键&#xff08;BC&#xff09;层的存在——控制模型漏洞的一小部分层。 攻击 BC 层可达到与攻击整个模型相同的效果&#xff0c;但被最先进 (SOTA) 防御检测到的机会要小得多。…

如何卸载360安全卫士

不用像其他教程那么复杂 这篇教程比较友好 1.打开桌面&#xff0c;右键单击快捷方式 选择“打开文件位置” 2.然后&#xff0c;搜uninst.exe 3.运行 4.选择“继续卸载” 5.选择“下一步” 6.选择 “继续卸载” 7.选择“继续卸载” 8.选择“是” 9.静等卸载 10.把卸载程序关…

【因果推断python】16_工具变量2

目录 出生季度和教育对工资的影响 第一阶段 出生季度和教育对工资的影响 到目前为止&#xff0c;我们一直将这些工具视为一些神奇的变量 Z&#xff0c;它们具有仅通过干预变量影响结果的神奇特性。老实说&#xff0c;好的工具变量来之不易&#xff0c;我们不妨将它们视为奇迹…

Windows11系统 和Android 调试桥(Android Debug Bridge,ADB)工具安装,app抓取日志内容

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Android调试桥&#xff08;ADB&#xff09;是一种多功能命令行工具&#xff0c;它允许开发者与连接到计算机上的Android设备进行通信和控制。ADB工具的作用包括但不限于&#xff1a; 安装和卸载应用程序&…

2024年先进材料与清洁能源国际会议(ICAMCE 2024)

2024 International Conference on Advanced Materials and Clean Energy 【1】大会信息 大会时间&#xff1a;2024-07-15 大会地点&#xff1a;中国三亚 截稿时间&#xff1a;2024-07-01(以官网为准&#xff09; 审稿通知&#xff1a;投稿后2-3日内通知 投稿邮箱&#xff1a…

揭秘相似矩阵:机器学习算法中的隐形“纽带”

在机器学习领域&#xff0c;数据的处理和分析至关重要。如何有效地从复杂的数据集中提取有价值的信息&#xff0c;是每一个机器学习研究者都在努力探索的问题。相似矩阵&#xff0c;作为衡量数据之间相似性的数学工具&#xff0c;在机器学习算法中扮演着不可或缺的角色。 相似矩…

Docker之路(三)docker安装nginx实现对springboot项目的负载均衡

Docker之路&#xff08;三&#xff09;dockernginxspringboot负载均衡 前言&#xff1a;一、安装docker二、安装nginx三、准备好我们的springboot项目四、将springboot项目分别build成docker镜像五、配置nginx并且启动六、nginx的负载均衡策略七、nginx的常用属性八、总结 前言…

SpringBoot高手之路02-全局异常处理器

RestControllerAdvice 可以将响应数据返回json格式然后响应 那么开始做全局异常处理器 首先先定义一个类 package com.healer.exception;import com.healer.common.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.we…

高并发系统限流原理

短时间内巨大的访问流量&#xff0c;我们如何让系统在处理高并发的同时还能保证自身系统的稳定性&#xff1f;估计有人会说&#xff0c;增加机器就可以了&#xff0c;因为我的系统架构设计就是按照分布式思想进行架构设计的&#xff0c;所以可以只需要增加机器就可以解决问题了…

在Unity中配置Android项目以允许HTTP流量,解决AVPro在Android平台中无法播放http视频

解决方法快速通道&#xff1a;拉到底&#xff0c;看倒数第二张图 好记性不如烂笔头 最近在使用AVpro插件播放http视频&#xff0c;在Editor中一切正常&#xff0c;然而打包在Android平台下就播放不了 AVPro在Unity中的警告&#xff1a; 感觉只是个警告&#xff0c;没引起注意…

实验报告题目

1、Anaconda环境配置 主要包括环境介绍&#xff0c;安装&#xff0c;以及numpy,matplotlib,pandas包的使用 2、线性回归模型 线性回归模型的基本原理 线性模型代码编写 结果分析 3、线性判别模型 线性判别模型的基本原理 线性模型代码编写 结果分析 4、决策树模型 决策树模型…

为什么3D渲染有的模型是黑的?---模大狮模型网

在3D建模和渲染的过程中&#xff0c;遇到模型渲染出来是黑色的情况并不罕见。这可能是由于多种原因导致的&#xff0c;包括但不限于材质设置问题、灯光配置不当、渲染设置错误等。 一、材质设置问题 材质丢失或错误&#xff1a;如果模型在导入或创建时材质没有正确加载或设置&…

Qt QML学习资料链接

文章目录 1. Qt QML2. 学习和使用Qt QML目的3. Qt QML常用的一些模块举例4. 参考链接 1. Qt QML Qt QML模块为基于QML language开发应用程序和库提供了语言和基础建设。它定义并实现了QML的语法和基础框架&#xff0c;并提供API使得应用程序开发者可以使用定制的类型扩展QML&a…