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

2024-01-10 10:44

本文主要是介绍第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

这篇关于第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590516

相关文章

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析