第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例

文章目录

    • 1.XtraBackup备份工具的简介
    • 2.XBK备份工具的安装
    • 3.XBK备份工具的使用语法
    • 4.XBK备份前的准备
    • 5.使用XBK对全库进行备份
      • 5.1.XBK备份全库数据的语法格式
      • 5.2.使用XBK进行全库备份
      • 5.3.查看XBK备份的数据文件
      • 5.4.备份过程中生产的XBK文件
    • 6.模拟故障案例并使用XBK恢复备份的数据
      • 6.1.模拟故障导致数据库损坏
      • 6.2.从XBK备份中恢复数据
    • 7.自主定义XBK备份文件的名称

1.XtraBackup备份工具的简介

XtraBackup是Percona公司开源的一款MySQL InnoDB(包括XtraDB,MyISAM)数据库备份工具,基于InnoDB的崩溃恢复功能,由于支持不锁表的在线物理热备而被广泛应用于生产环境。

XBK备份恢复原理:

XtraBackup备份执行的瞬间,会立即触发checkpoint机制,将已提交事务的脏页数据从内存刷新到磁盘中,并记录此时日志序列号(LSN号),此时触发备份,然后复制磁盘中的数据页以及数据文件到备份路径,在备份过程中可能会有新的数据变化、新的事物提交,XBK还会将备份过程中产生的Redo log和Undo log一并备份,并且提取Redo Log中最后的LSN号,也就是checkpoint机制刷新到磁盘时记录的LSN之后,产生的Redo log和Undo log。

XtraBackup备份时会对非InnoDB引擎的表进行锁表,实现温备,对InnoDB引擎的表不进行锁表,直接复制InnoDB数据页及数据文件到备份路径中。

XBK的恢复过程就是模拟InnoDB的自动故障恢复(CSR)的过程,将Redo Log与Undo log进行应用,对比Redo log中最后的LSN号和备份前记录时的LSN号,既要保证备份数据的恢复,又要保证备份时产生的新数据的恢复,备份时产生的新数据就是从备份时的LSN号到Redo中的LSN之间的数据,这些数据如果是提交的那么就用备份的Redo文件恢复,如果是未提交的数据则使用备份的Undo文件进行恢复,恢复就是将备份的数据文件cp还原到原数据目录下。

XBK热备理念就是将备份触发之前的数据都备份,对于备份过程中的新数据也会备份下来,备份过程中的新数据就是Redo Log和Undo Log了,XBK在备份触发的时候会通过CKPT机制刷新脏页数据到磁盘,此时会记录LSN号,而Redo Log中也有对应的LSN号,当我们要恢复数据时,假如说备份时的LSN号是101,备份完后Redo Log中的LSN号是110,那么102-110之间的LSN号对应的事务就是备份过程中产生的新数据,对于新数据已经提交的数据用备份的Redo文件恢复,未提交的数据用Undo文件进行回滚恢复,保证数据的一致性。

XBK备份需要依赖MySQL的主配置文件/etc/my.cnf,如果配置文件不在这个路径需要单独指定。

2.XBK备份工具的安装

1.安装依赖的软件
[root@mysql ~]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL2.安装xbk
[root@mysql ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
[root@mysql ~]# yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm	

3.XBK备份工具的使用语法

XBK备份语法格式:innobackupex [--defaults-file=#] [OPTIONS] 备份路径

参数:

  • --defaults-file:指定MySQL配置文件的路径。
  • --apply-log:整理备份,将redo log进行重做,将已提交的事务写到备份的数据文件,对未提交的事务使用undo回滚掉,模拟了CSR的过程,这个参数就是将备份过程中产生的新数据一并写入到备份文件中,保证数据的一致性。
  • --redo-only:这个参数需要配合--apply-log这个参数一起使用,表示在整理备份数据时只执行redo前滚操作,不执行undo回滚操作。
  • --copy-back:恢复数据。
  • -S:指定MySQL socket文件。
  • --stream=tar:开启流备份,备份成tar包。
  • --user-memory=256M:为xbk分配256M的内存进行备份。
  • --parallel=8:并发处理数,一般都是CPU核数的一半。

4.XBK备份前的准备

XBK备份前我们需要进行一些配置,否则备份会失败。

首先要确保MySQL主配置文件在/etc/my.cnf里,如果不在这个路径,备份时需要指定配置文件的路径,如以下所示:通过--defaults-file参数指定配置文件的路径。

[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456  /data/dbbackup/

另外还需要在MySQL的主配置文件中指定客户端使用的MySQL socket文件,否则XBK备份时会报错,提示找不到socket文件。

[root@mysql ~]# vim /etc/my.cnf
[client]
socket=/tmp/mysql.sock

如果不想在主配置文件中指定client的socket文件,那么可以在备份命令中通过-S参数指定socket文件的路径。

[root@mysql ~]# innobackupex --user=root --password=123456 -S /tmp/mysql.sock /data/dbbackup/

5.使用XBK对全库进行备份

5.1.XBK备份全库数据的语法格式

innobackupex --user=数据库账号 --password=数据库密码 --defaults-file=配置文件路径 -S socket文件路径 备份路径

5.2.使用XBK进行全库备份

[root@mysql ~]# innobackupex --user=root --password=123456 /data/dbbackup/

当看到 completed OK! 一行就表示备份成功了。

image-20220703105846689

5.3.查看XBK备份的数据文件

XBK备份结束后,会在指定的备份路径生成一个当前时间命名的目录,在这个目录中存放了备份数据库的数据文件。

image-20220703110021558

XBK备份出来的就是数据库的数据文件,可以和数据库数据路径的文件进行对比,几乎就是完完全全的cp过来的,除了数据库的备份外,还产生了四个XBK生成的文件。

image-20220703110221097

5.4.备份过程中生产的XBK文件

使用XBK备份完成后,会生产四个关于XBK的文件,用于记录一些配置信息。

-rw-r----- 1 root root       63 73 10:58 xtrabackup_binlog_info
-rw-r----- 1 root root      113 73 10:58 xtrabackup_checkpoints
-rw-r----- 1 root root      542 73 10:58 xtrabackup_info
-rw-r----- 1 root root     2560 73 10:58 xtrabackup_logfile

1)xtrabackup_binlog_info

该文件会记录备份时刻Binlog的状态信息,包括备份时最近的GTID号以及事件的Position标识位号,可以用来截取Binlog日志。

[root@mysql 2022-07-03_10-58-17]# cat xtrabackup_binlog_info 
mysql-bin.000013	344	e0a2c0cc-f835-11ec-8a3c-005056b791aa:1-79

334就是事件的Position号。

2)xtrabackup_checkpoints

记录XBK备份触发时的checkpoints机制信息。

[root@mysql 2022-07-03_10-58-17]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0					#上次所到达的LSN号(对于全备就是从0开始,对于增量有别的显示方法)
to_lsn = 6136767				#备份开始时间(ckpt)点数据页的LSN号
last_lsn = 6136776				#备份结束后,redo日志最终的LSN
compact = 0
recover_binlog_info = 0

这个文件非常重要。
(1)备份时刻,立即将已经commit过的,内存中的数据页刷新到磁盘(CKPT).开始备份数据,数据文件的LSN会停留在to_lsn位置。
(2)备份时刻有可能会有其他的数据写入,已备走的数据文件就不会再发生变化了。
(3)在备份过程中,备份软件会一直监控着redo的undo,如果一旦有变化会将日志也一并备走,并记录LSN到last_lsn。
从to_lsn ----> last_lsn 就是备份过程中产生的数据变化.

3)xtrabackup_info

XBK备份时的一些参数信息。

image-20220703111144658

4)xtrabackup_logfile

日志文件。

6.模拟故障案例并使用XBK恢复备份的数据

6.1.模拟故障导致数据库损坏

将db_1、db_2、db_3的数据文件删除,然后从XBK备份中恢复数据。

[root@mysql ~]# rm -rf /data/mysql/db_1/
[root@mysql ~]# rm -rf /data/mysql/db_2/
[root@mysql ~]# rm -rf /data/mysql/db_3/

6.2.从XBK备份中恢复数据

1)对redo log进行重做

将redo log进行重做,将已提交的事务写到备份的数据文件,对未提交的事务使用undo回滚掉,模拟了CSR的过程,这一步就是将备份过程中产生的新数据一并写入到备份文件中,保证数据的一致性。

[root@mysql ~]# innobackupex --apply-log /data/dbbackup/2022-07-03_10-58-17/

2)恢复数据

恢复数据非常简单,只需要通过cp命令将数据文件拷贝到数据库目录即可。

[root@mysql ~]# \cp -ra /data/dbbackup/2022-07-03_10-58-17/* /data/mysql/
[root@mysql ~]# chown -R mysql. /data/mysql/
[root@mysql ~]# systemctl restart mysqld

7.自主定义XBK备份文件的名称

在前面看到XBK备份出来的目录是以时间戳定义的,精确到了时分秒,其实也不太友好。

我们可以通过--no-timestamp参数跳过XBK默认的备份文件名,我们自定义XBK的备份文件名称。

[root@mysql ~]# innobackupex --user=root --password=123456  --no-timestamp /data/dbbackup/all_bak_`date +%F`

image-20220703112713170

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

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

相关文章

openssl3.2 - 官方dmeo学习 - server-arg.c

文章目录 openssl3.2 - 官方dmeo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方dmeo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

Python操作excel-读取、表格填充颜色区分

1.场景分析 遇到一个需要读取本地excel数据,处理后打入到数据库的场景,使用java比较重,python很好的解决了这类问题 2.重难点 本场景遇到的重难点在于: 需要根据表格内的背景颜色对数据进行筛选 读取非默认Sheet 总是出现Value…

day-05 删除子串后的字符串最小长度

思路 通过不断地检查是否含有"AB"或"CD"&#xff0c;如果有则将其从字符串中删除&#xff0c;直到"AB"或"CD"都不存在时&#xff0c;返回字符串的长度 解题方法 //检测是否有"AB" for(int i0;i<len-1;i){ if(s.charAt(i…

Python画国旗

前言 今天&#xff0c;我们来用turtle库来绘制国旗 一、美国国旗 国旗的形状是长方形;国旗的长宽之比为19:10&#xff0c;美国国旗由红、白、蓝三色组成;画面格局由两部分组成&#xff0c;旗的左上方蓝底上排列着50颗白色的星&#xff0c;6颗一排与5颗一排相间排列&#xff…

创建一个郭德纲相声GPTs

前言 在这篇文章中&#xff0c;我将分享如何利用ChatGPT 4.0辅助论文写作的技巧&#xff0c;并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&…

K8S存储卷和数据卷

容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;delete&#xff0c;k8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会恢复到初始状态&#xff0c;一旦回到初始状态&#xff0c;所有的后天编辑的文件都会消失 容器…

年轻人2023消费图鉴,媒介盒子为你揭秘

回顾近一年的消费&#xff0c;发现大家差不多都是“扣扣嗖嗖的花了很多钱”&#xff0c;如果总结2023年的大众消费关键词&#xff0c;那一定是更加“理性”&#xff0c;据艾瑞咨询《2023年中国消费者洞察白皮书》显示&#xff0c;“精细化”成为2023年的消费关键词&#xff0c;…

十二、QProgressBar的简单使用与样式优化(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 五、扩展(自定义QProgressBar样式) 一、设计需求 在很多应用程序中&#xff0c;在执行费时操作时都会展示一个进度条来展示操作进行的进度。常见的场景&#xff0c;如&#xff1a;拷贝操作、安装操作以及卸载操作。…

Unity组件开发--AB包打包工具

1.项目工程路径下创建文件夹&#xff1a;ABundles 2.AB包打包脚本&#xff1a; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement;public class AssetBundle…

Vue入门三(表单控制|购物车案例|v-model进阶|与后端交互|计算属性|监听属性|Vue生命周期)

文章目录 一、表单控制二、购物车案例三、v-model进阶四、与后端交互跨域问题解决&#xff0c;三种交互方法跨域问题详解1-CORS&#xff1a;后端代码控制&#xff0c;上面案例采用的方式1) 方式一&#xff1a;后端添加请求头2) 方式二&#xff1a;编写中间件3) 方式三&#xff…

代理IP连接不上?网速过慢?自查与解决方法

当您使用代理时&#xff0c;您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中&#xff0c;我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

Mysql系列-1.Mysql基本使用

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

RT-Thread基于AT32单片机的485应用开发(二)

在上篇RT-Thread基于AT32单片机的485应用开发&#xff08;一&#xff09;中实现了RS485收发&#xff0c;但总觉得效率不高&#xff0c;函数封装也不完善。考虑到RS485总线应用都是主从式结构&#xff0c;比如工业领域常用的Modbus协议&#xff0c;都是以帧为单位进行收发&#…

【python】内存管理和数据类型问题

一、内存管理 Python有一个自动内存管理机制&#xff0c;但它并不总是按照期望的方式工作。例如&#xff0c;如果创建了一个大的列表或字典&#xff0c;并且没有删除它&#xff0c;那么这个对象就会一直占用内存&#xff0c;直到Python的垃圾回收器决定清理它。为了避免这种情…

【Verilog】运算符

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 系列文章算术运算符关系运算符相等关系运算符逻辑运算符按位运算符归约运算符移位运算符条件运算符连接和复制运算符 算术运算符 …

全志T113开发板Qt远程调试

1引言 通常情况下工程师在调试Qt程序时&#xff0c;需要频繁制作镜像烧录到核心板来测试Qt程序是否完善&#xff0c;这样的操作既费时又费力。这时我们可以通过QtCreator设备功能&#xff0c;定义设备后&#xff0c;在x86_64虚拟机上交叉编译qt程序&#xff0c;将程序远程部署到…

【机器学习前置知识】狄利克雷分布

在阅读本文前&#xff0c;建议先食用以下几篇文章以能更好地理解狄利克雷分布&#xff1a; 二项分布 Beta分布 多项分布 共轭分布 狄利克雷分布 狄利克雷分布(Dirichlet distribution)是Beta分布的扩展&#xff0c;把Beta分布从二元扩展到多元形式就是狄利克雷分布&#…

你Go代码写的像“鸭子”吗???

概 述 Go 语言也提供了接口类型&#xff0c;使得我们可以面向接口编程&#xff0c;将实现和接口分离。在我看来&#xff0c;软件的抽象之美也应该以此来表达&#xff0c;和 Java 语言不同的是 Go 并不是那么 “强制”&#xff0c;它使用了一种 鸭子类型 的方式让动态类型成为可…

three.js : tweenjs创建threejs动画

效果&#xff1a; 代码 <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div> <div class"box-right"><…