当前位置: 首页 > 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、或者由一个根节点加上两颗分别称为左子树和右子树的两颗子树构成; 堆就是一颗完全二叉树&…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...