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

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨

💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

    今天作为PXB系列的第三篇,这篇文章其实计划是在上周写的,奈何工作上的事情过于繁忙,就迟迟一直抽不出身来专注写作,不过,正所谓“好饭不怕晚”,今天难得下午有时间来兑现我的承诺,将这篇期待已久的文章呈现在大家面前,如标题所示今天带来的是——Percona XtraBackup标准化全库完整备份策略。 

    删过库跑过路的小伙伴都知道有备份是多么的重要😄,全库备份将作为最后的恢复手段。不是执行一个xtrabackup备份命令就完事了,xtrabackup备份需要备份哪些内容,xtrabackup输出的备份片名称应该怎么命名这些都是非常有讲究的,不能执行了一个全库备份命令,生成的备份没有命名,而是xtrabackup自己内部命名的,这让一个刚上手的小伙伴会感觉的很蒙蔽,不知道应该从那个备份开始恢复。所以今天就带着这些疑问开始今天的内容吧。

    用一篇文章是不能将Percona XtraBackup工具讲明白的,所以我将理论、命令、备份策略、异机恢复、使用场景等分成五篇去介绍,即使分为五篇也有部分内容没有涵盖到,但是这五篇文章都是精华,掌握了之后就可以轻松应对Percona XtraBackup工具的相关日常工作了,五篇文章的内容分别如下:

  • 第一篇:Percona XtraBackup物理备份工具的基础理论概述
  • 第二篇:Percona XtraBackup工具备份指南:常用备份命令详解与实践(当前篇)
  • 第三篇:Percona XtraBackup标准化全库完整备份策略
  • 第四篇:Percona XtraBackup全量+mysqlbinlog增量完成异机恢复:基于全库恢复 or 基于时间点恢复
  • 第五篇:物理克隆数据clone插件、逻辑备份工具mysqldump/mysqlpump和物理备份工具Percona XtraBackup这三种的区别和各自的使用场景总汇

           

xtrabackup备份应该哪些内容:

  • 备份内容一:参数文件。MySQL启动的第一步就是读取参数文件中的内容,备份他有多重要那么就不言而喻了。
  • 备份内容二:数据库对象、共享表空间(ibdata)、临时表空间(ibtmp)、undo文件。在MySQL中没有控制文件这个概念,所以读取完参数文件后,就开始打开数据库对象、共享表空间(ibdata)、临时表空间(ibtmp)、undo文件。备份他有多重要那么就不言而喻了。
  • 备份内容三:二进制日志。二进制日志记录mysql所有的DDL和DML(除了数据查询语句select)语句事件。用来记录数据库中发生的修改情况,数据的修改、表的创建及修改等。它既可以记录涉及修改的SQL,也可以记录数据修改的行变化记录,同时也记录了执行时间。类似于oracle的归档日志,二进制有可能会被重做日志替代(自己的猜测哦😁)。备份他有多重要那么就不言而喻了

上面我说了三个重要,所以xtrabackup备份少了那一个都不行滴!

                             

xtrabackup全库备份脚本:包括数据文件(数据库对象、共享表空间(ibdata)、临时表空间(ibtmp)、undo文件)、参数文件

Date=`date +%Y%m%d`
Begin=`date +"%Y-%m-%d %H:%M:%S"`        
Port=3306# 实例压缩备份(恢复时需要借助qpress-11-linux-x64.tar解压缩工具,备份时不需要)
/mysql/app/mysql/bin/xtrabackup/bin/xtrabackup --defaults-file=/mysql/data/3306/my.cnf --socket=/mysql/data/3306/mysql.sock --user=root --password=123456 --no-lock --backup --compress --compress-threads=2 --target-dir=/mysql/backup/full/xtrabackup_full_${Port}_${Date} --parallel=2 2> /mysql/backup/logs/xtrabackup_full_${Port}_${Date}_err.log#copy备份参数文件
cp /mysql/data/3306/my.cnf /mysql/backup/full/backup-my.cnf_${Port}_${Date}find /mysql/backup/logs/ -name "xtrabackup_*_${Port}_*_err.log" -mtime +14 -exec rm -rf {} \;
find /mysql/backup/full/ -name "xtrabackup_*_${Port}_*" -mtime +14 -exec rm -rf {} \;     
find /mysql/backup/full/ -name "backup-my.cnf_${Port}_*" -mtime +14 -exec rm -rf {} \;      ### -mtime +14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -l(ll)命令输出的内容中就是最后修改时间 (mtime)。

                             

二进制日志备份脚本:增量备份二进制日志(增量:只copy上次备份时没有的二进制日志)

BinLogDir=/mysql/log/3306/binlog           ###二进制目录日志(实际路径,定义在my.cnf文件中)
BinIndexFile=/mysql/log/3306/binlog/itpuxdb-binlog.index    ###二进制索引输出路径(实际文件,定义在my.cnf文件中)
Date=`date +%Y%m%d`
Port=3306BinLogBakDir=/mysql/backup/binlog             ###备份二进制日志的路径
LogOutFile=/mysql/backup/logs/backup_mysql_binlog_${Port}_${Date}.log   ###日志信息
NextLogFile=`tail -n 1 $BinIndexFile`
LogCounter=`wc -l $BinIndexFile |awk '{print $1}'`          ###统计索引二进制文件数量
NextNum=0 
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
echo "--------------------------------------------------------------------" >> $LogOutFile
echo binlog-backup---`date +"%Y-%m-%d %H:%M:%S"` Bakup Start... >> $LogOutFile
for binfile in `cat $BinIndexFile`
dobase=`basename $binfile`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [ $NextNum -eq $LogCounter ]thenecho $base skip! >> $LogOutFileelsedest=$BinLogBakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去thenecho $base exist! >> $LogOutFileelsecp $BinLogDir/$base $BinLogBakDirecho $base copying >> $LogOutFilefifi
done
echo binlog-backup---`date +"%Y-%m-%d %H:%M:%S"` Bakup Complete! Next LogFile is: $NextLogFile  >> $LogOutFilefind /mysql/backup/logs -name "backup_mysql_binlog_${Port}_*.log" -mtime +14 -exec rm -rf {} \;
find $BinLogBakDir -name "*binlog.**" -mtime +14 -exec rm -rf {} \;       ###清理14天前的备份的binlog日志

                 

案例一:对MySQL实例进行xtrabackup全库备份。保留4份xtrabackup完整备份,14天的二进制日志备份

一、数据备份的路径规划:

[root@mysql1 ~]# mkdir -p /mysql/backup/full
[root@mysql1 ~]# mkdir -p /mysql/backup/logs
[root@mysql1 ~]# mkdir -p /mysql/backup/binlog
[root@mysql1 ~]# mkdir -p /mysql/backup/script
###full(mysqldump全备的数据)、script(备份脚本)、binlog(需要打开binlog日志功能)、logs(备份日志)[root@mysql1 ~]# chown -R mysql:mysql /mysql/backup/ 

二、xtrabackup全备脚本

[root@mysql1 ~]# cd script/
[root@mysql1 ~]# vi xtrabackup_full_3306.shDate=`date +%Y%m%d`
Begin=`date +"%Y-%m-%d %H:%M:%S"`        
Port=3306# 实例压缩备份(恢复时需要借助qpress-11-linux-x64.tar解压缩工具,备份时不需要)
/mysql/app/mysql/bin/xtrabackup/bin/xtrabackup --defaults-file=/mysql/data/3306/my.cnf --socket=/mysql/data/3306/mysql.sock --user=root --password=123456 --no-lock --backup --compress --compress-threads=2 --target-dir=/mysql/backup/full/xtrabackup_full_${Port}_${Date} --parallel=2 2> /mysql/backup/logs/xtrabackup_full_${Port}_${Date}_err.log#copy备份参数文件
cp /mysql/data/3306/my.cnf /mysql/backup/full/backup-my.cnf_${Port}_${Date}find /mysql/backup/logs/ -name "xtrabackup_*_${Port}_*_err.log" -mtime +14 -exec rm -rf {} \;
find /mysql/backup/full/ -name "xtrabackup_*_${Port}_*" -mtime +14 -exec rm -rf {} \;     
find /mysql/backup/full/ -name "backup-my.cnf_${Port}_*" -mtime +14 -exec rm -rf {} \;      ### -mtime +14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -l(ll)命令输出的内容中就是最后修改时间 (mtime)。

三、binlog日志增量脚本(增量:只copy上次备份时没有的二进制日志)

[root@mysql1 ~]# cd script/
[root@mysql1 ~]# vi  backup_mysql_binlog_3306.shBinLogDir=/mysql/log/3306/binlog           ###二进制目录日志(实际路径,定义在my.cnf文件中)
BinIndexFile=/mysql/log/3306/binlog/itpuxdb-binlog.index    ###二进制索引输出路径(实际文件,定义在my.cnf文件中)
Date=`date +%Y%m%d`
Port=3306BinLogBakDir=/mysql/backup/binlog             ###备份二进制日志的路径
LogOutFile=/mysql/backup/logs/backup_mysql_binlog_${Port}_${Date}.log   ###日志信息
NextLogFile=`tail -n 1 $BinIndexFile`
LogCounter=`wc -l $BinIndexFile |awk '{print $1}'`          ###统计索引二进制文件数量
NextNum=0 
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
echo "--------------------------------------------------------------------" >> $LogOutFile
echo binlog-backup---`date +"%Y-%m-%d %H:%M:%S"` Bakup Start... >> $LogOutFile
for binfile in `cat $BinIndexFile`
dobase=`basename $binfile`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [ $NextNum -eq $LogCounter ]thenecho $base skip! >> $LogOutFileelsedest=$BinLogBakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去thenecho $base exist! >> $LogOutFileelsecp $BinLogDir/$base $BinLogBakDirecho $base copying >> $LogOutFilefifi
done
echo binlog-backup---`date +"%Y-%m-%d %H:%M:%S"` Bakup Complete! Next LogFile is: $NextLogFile  >> $LogOutFilefind /mysql/backup/logs -name "backup_mysql_binlog_${Port}_*.log" -mtime +14 -exec rm -rf {} \;
find $BinLogBakDir -name "*binlog.**" -mtime +14 -exec rm -rf {} \;       ###清理14天前的备份的binlog日志

四、在root下添加全备脚本和binlog增量脚本的自动计划任务

[root@lf script]# chmod 775 /mysql/backup/script/*.sh   --确保root用户有执行权限
[root@lf script]# crontab -e
#xtrabackup_3306_full
00 23 * * 1,5 /mysql/backup/script/xtrabackup_full_3306.sh       ###每周一和周五执行一次全备,保留4份#mysql_3306_binlog
00 02 * * * /mysql/backup/script/backup_mysql_binlog_3306.sh     ###每天凌晨进行归档全备,保留14天

五、Root下测试脚本可用性,并查看日志

全备:

[root@lf script]# /mysql/backup/script/xtrabackup_full_3306.sh
[root@lf logs]$ tail -2000f /mysql/backup/logs/xtrabackup_full_3306_20240710_err.log

              

增量:

[root@mysql1 script]# /mysql/backup/script/backup_mysql_binlog_3306.sh
[root@mysql1 binlog]# tail -200f /mysql/backup/logs/backup_mysql_binlog_3306_20240710.log


    关于PXB标准化全库完整备份策略到这里就算完成了,淦了1个半小时,目前也就不到7千字,虽然字数不多,但是对于需要通过xtrabackup做备份策略的小伙伴而言是非常有用的一篇文章,当然备份策略也需要随着业务的发展而不断优化和调整,打造出最适合业务的备份方案。

    最后,感谢每一位集帅的阅读和支持。如果在备份过程中遇到了任何问题或有任何宝贵的建议,欢迎随时与我交流分享。

相关文章:

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...

背单词工具(C++)

功能分析 生词本管理: 创建生词本文件:在构造函数中创建了“生词本.txt”“背词历史.log”“历史记录.txt”三个文件。添加单词:用户可以输入单词、词性和解释,将其添加到生词本中。查询所有单词:展示生词本中所有的单…...

面试八股 | 数据库引擎 | InnoDB和myISAM的区别?

⭐️⭐️⭐️InnoDB和MyISAM的区别? InnoDB : 1、使用的是行锁,操作时候只锁一行数据,不会对其他有影响,适合高并发工作 2、支持事务 3、不仅缓存索引还要缓存真实数据,适合高并发 4、默认安装 5、支持外键 6、…...

GEE计算五种植被指数(NDVI、EVI2、RVI、MTVI2、OSAVI)

目录 计算公式源代码计算公式 源代码 // 定义感兴趣区域(这里以一个简单的矩形区域为例) var region = ee.FeatureCollection("projects/a-flyllf0313/assets/dachang"); // 定义时间范围 var startDate = 2023-04-18; var endDate &...

C/S架构和B/C架构

C/S架构(Client/Server Architecture)和B/C架构(Browser/Client Architecture)是两种不同 的软件架构模型,它们各自有不同的特点和应用场景。 一、C/S架构(Client/Server Architecture) 1. 定…...

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧,重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧&#xf…...

浅聊Web Storage(localStorage 和 sessionStorage)、cookie的使用场合

Web Storage(localStorage 和 sessionStorage)、cookie 一、Cookie二、Web StoragelocalStoragesessionStorage与 Cookies 的比较 一、Cookie Cookies 主要用于以下几种情况: 会话管理(Session Management): 登录、购…...

C语言输入输出缓冲机制

文章目录 输入输出缓冲机制概述为什么要有缓冲区缓冲区的类型引发缓冲区的刷新 原理实现 输入输出缓冲机制 概述 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入 或者输出的数…...

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…...

EtherNet/IP转Profinet协议网关(经典配置案例)

怎么样才能把EtherNet/IP和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为JM-PN-EIP,下面是详细介绍。 一,设备主要功能 1、捷米特J…...

华为云依赖引入错误

问题:记录一次项目加在华为云依赖错误,如下: 错误信息:Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…...

【Ubuntu】Ubuntu 配置镜像源(ARM)

【Ubuntu】Ubuntu 配置镜像源(ARM) 零、起因 最近在QEMU中安装了个ubuntu-24.04-live-server-arm64,默认是国外的软件源,很慢,故替换到国内。 壹、替换 源地址(清华源) https://mirror.tun…...

速腾聚创激光雷达复现FAST-LIO

目录 1.软件环境 2.测试执行 3.代码学习 3.1.找主节点代码文件 3.2.整体流程结构 3.3.具体函数理解 记录复现FAST-LIO算法的过程和,代码梳理和理解 1.软件环境 Windows 10(64bits) VMware 16 Pro Ubuntu 20.04 ROS Noetic FAST-LIO的简化版、注释版。感谢…...

k8s核心知识总结

写在前面 时间一下子到了7月份尾;整个7月份都乱糟糟的,不管怎么样,日子还是得过啊, 1、7月份核心了解个关于k8s,iceberg等相关技术,了解了相关的基础逻辑,虽然和数开主线有点偏,但是…...

语言模型及数据集

一、定义 1、语言模型的目标是估计序列的联合概率,一个理想的语言模型就能够基于模型本身生成自然文本。 2、对一个文档(词元)序列进行建模, 假设在单词级别对文本数据进行词元化。 3、计数建模 (1)其中…...

linux如何卸载python3.5

卸载: 1、卸载python3.5 sudo apt-get remove python3.5 2、卸载python3.5及其依赖 sudo apt-get remove --auto-remove python3.5 3、清除python3.5 sudo apt-get purge python3.5 或者 sudo apt-get purge --auto-remove python3.5...

【BUG】已解决:TypeError: expected string or bytes-like object

TypeError: expected string or bytes-like object 目录 TypeError: expected string or bytes-like object 【常见模块错误】 【解决方案】 常见原因及解决方法 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…...

在linux上面用drissionpage自动化遇到反爬?

目录 一、反爬内容1、案例12、案例2 二、后来发现的问题解决 一、反爬内容 1、案例1 反爬的响应文本返回如下:爬虫均能精准识别,测试链接:https://ziyuan.baidu.com/crawltools/index)非正常爬虫访问时:返回的压缩报文内容无法直接识别,可一定程度上保护站点信息安…...

vue3大事件管理系统 === 首页 layout 文章分类页面 -

目录 首页 layout 架子 [element-plus 菜单] 基本架子拆解 登录访问拦截 用户基本信息获取&渲染 退出功能 [element-plus 确认框] 文章分类页面 - [element-plus 表格] 基本架子 - PageContainer 文章分类渲染 封装API - 请求获取表格数据 el-table 表格动态渲染 …...

堆的基本实现

一、堆的概念 在提出堆的概念之前,首先要了解二叉树的基本概念 一颗二叉树是节点的有限集合,该集合: 1、或者为空; 2、或者由一个根节点加上两颗分别称为左子树和右子树的两颗子树构成; 堆就是一颗完全二叉树&…...

Ubuntu上编译多个版本的frida

准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs,版本的话我就选的20.15.1: tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …...

概率论三大分布

目录 基本概念 卡方分布(χ分布): t分布: F分布: 延伸 卡方分布在哪些具体情况下最适合用于数据分析? t分布在大样本情况下的表现与正态分布相比如何? F分布在进行方差比较时与t分布的区…...

Spring系统学习-基于XML的声明式事务

基本概念 在Spring框架中,基于XML的事务管理是一种通过XML配置文件来管理事务的方式。Spring提供了强大的事务管理功能,可以与多种持久化技术(如JDBC、Hibernate、JPA等)结合使用。以下是如何在Spring中使用基于XML的事务管理的基…...

iOS中的MVVM设计模式

目录 前言 一、MVVM简介 二、MVVM的核心思想 三、MVVM的优势 四、MVVM在iOS中的实现 1. 创建Model 2. 创建ViewModel 3. 创建View 4. 主入口 总结 前言 随着iOS开发的发展,构建可维护和可扩展的代码架构变得至关重要。Model-View-ViewModel (MVVM) 是一种…...

ES中的数据类型学习之ARRAY

Arrays | Elasticsearch Guide [7.17] | Elastic 中文翻译 :Array Elasticsearch 5.4 中文文档 看云 Arrays In Elasticsearch, there is no dedicated array data type. Any field can contain zero or more values by default, however, all values in the a…...

vue网络请求

post网络请求 import axios from axios import {ElMessage, ElLoading} from "element-plus" import { nextTick } from "vue" import JSONbig from json-bigint import { userToken } from "/constants/Constant.js";const defaultConfig {bas…...

几何光学基本原理——费马原理和射线方程

在几何光学中,射线方程用于描述光在折射率不均匀的介质中传播的路径。折射率的变化会导致射线发生弯曲,射线方程正是用于计算这种弯曲路径的。 几何光学的基本原理 几何光学假设光在介质中沿直线传播,但在折射率变化的介质中,光的…...

OpenCV车牌识别技术详解

第一部分:图像预处理 车牌识别(License Plate Recognition,LPR)是计算机视觉领域的一个重要应用,它涉及到图像处理、模式识别等多个方面。OpenCV作为一个强大的计算机视觉库,提供了丰富的车牌识别相关功能…...

解决llama_index中使用Ollama出现timed out 问题

现象: File "~/anaconda3/envs/leo_py38/lib/python3.8/site-packages/httpx/_transports/default.py", line 86, in map_httpcore_exceptionsraise mapped_exc(message) from exc httpx.ReadTimeout: timed out代码: from llama_index.core …...

Python爬虫技术 第14节 HTML结构解析

HTML 结构解析是 Web 爬虫中的核心技能之一,它允许你从网页中提取所需的信息。Python 提供了几种流行的库来帮助进行 HTML 解析,其中最常用的是 BeautifulSoup 和 lxml。 1. 安装必要的库 首先,你需要安装 requests(用于发送 HTT…...