【5】MySQL数据库备份-XtraBackup - 全量备份

MySQL数据库备份-XtraBackup-全量备份

  • 前言
    • 环境
    • 版本
  • 安装部署
    • 下载
      • RPM 包
      • 二进制包
    • 安装
    • 卸载
  • 场景分析
    • 全量备份 | 恢复
      • 备份
      • 恢复
      • 综合
    • 增量备份 | 恢复
    • 部分备份 | 恢复

前言

关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重复概述。本篇主要对 XtraBackup 工具的使用做下详细讲解。

首先,说下所使用的环境、版本。

环境

  • 操作系统:Red Hat Enterprise Linux Server release 7.5 (Maipo)
  • 数据库:mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
  • XtraBackup:
    • percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
    • percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm

版本

关于 XtraBackup 的版本这里有必要说明下,参考官网如下:

  • https://www.percona.com/blog/aligning-percona-xtrabackup-versions-with-percona-server-for-mysql/
    在这里插入图片描述
  • 翻译成大白话的意思就是:Percona XtraBackup 的版本要超过大于或等于)数据库的版本。

但我个人的习惯,还是尽量和数据库的版本保持一致(仅个人习惯)。
原因如下
当前 MySQL 数据库版本 8.0.32,若安装 XtraBackup 版本为 8.0.35-??,则查看 XtraBackup 版本时,将有如下输出、其最后一句,看着别扭
在这里插入图片描述
版本也是经过测试的,可以备份 MySQL 8.0.32 的版本。

而且备份中,也有输出:xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
看着就是别扭故 XtraBackup 版本一般与数据库当前版本保持一致
在这里插入图片描述在这里插入图片描述

安装部署

下载

下载安装包的方式较多,当前主要以RPM包二进制包进行讲解,本篇博文使用RPM包安装部署、测试。

RPM 包

访问官网地址:https://www.percona.com/downloads
打开官网页面后,鼠标往下扒拉、可找到如下截图:依次选择下载 即可。
在这里插入图片描述
或者直接使用下载地址:

  • 8.0.35
    https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
  • 8.0.32
    https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-25/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm

二进制包

  1. 执行如下命令进行下载:
  • 命令参考官网地址:https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball.html
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz

上述下载命令中包版本的选择(或者包名字的选择), 可参考官网如下地址:
https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball-names.html
在这里插入图片描述

安装

在安装 XtraBackup 过程中遇到了报错,见《XtraBackup 安装报错 zstd》文章,故提前做下依赖包的安装。

  1. 安装依赖包执行如下命令:
yum -y install epel-release zstd
  1. 安装 XtraBackup
yum -y install percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
  1. 查看版本
    说明下哈:实际上,我使用的版本是8.0.32 版本,当前安装的是 8.0.35 版本,你懂我的意思吧?-- 下面有卸载步骤。
[root@testdbmy01 soft]# xtrabackup -version2024-06-01T10:05:07.033137+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --server-id=8833 --datadir=/mysql/data --tmpdir=/mysql/tmp --open_files_limit=65535 --log_bin=/mysql/binlog/mysql-bin --innodb_data_home_dir=/mysql/data/ --innodb_log_group_home_dir=/mysql/data/ --innodb_file_per_table=1 --innodb_data_file_path=ibdata1:1G:autoextend --innodb_flush_log_at_trx_commit=1 --innodb_buffer_pool_size=1G --innodb_io_capacity=1000 --innodb_max_dirty_pages_pct=60 --innodb_flush_method=O_DIRECT --innodb_log_file_size=2G --innodb_log_files_in_group=2 --innodb_log_buffer_size=64M --innodb_write_io_threads=8 --innodb_read_io_threads=8 --innodb_open_files=4096 
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
[root@testdbmy01 soft]# 

卸载

  1. 查找已经安装的 XtraBackup 名称
[root@testdbmy01 soft]# yum list installed | grep -i xtrabackup
percona-xtrabackup-80.x86_64              8.0.35-30.1.el7          installed    
[root@testdbmy01 soft]# 
  1. 卸载
[root@testdbmy01 soft]# yum -y remove percona-xtrabackup-80.x86_64
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 will be erased
--> Finished Dependency ResolutionDependencies Resolved==========================================================================================================================================================================================Package                                              Arch                                  Version                                        Repository                                Size
==========================================================================================================================================================================================
Removing:percona-xtrabackup-80                                x86_64                                8.0.35-30.1.el7                                installed                                219 MTransaction Summary
==========================================================================================================================================================================================
Remove  1 PackageInstalled size: 219 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionErasing    : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64                                                                                                                           1/1 Verifying  : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64                                                                                                                           1/1 Removed:percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7                                                                                                                                          Complete!
[root@testdbmy01 soft]# 

场景分析

再次声明 虽然安装的步骤中是8.0.35版本,但实际上:背地里 偷偷的卸载重装了 XtraBackup 版本是 8.0.32
如下场景也是基于8.0.32版本,一个小版本号而已,问题不大。

全量备份 | 恢复

备份

  1. 创建备份目录(使用root用户执行)
[root@testdbmy01 /]# DATE=`date +%Y%m%d%H`
[root@testdbmy01 /]# mkdir -p /backup/$DATE 
  1. 执行备份
[root@testdbmy01 /]# xtrabackup --backup --target-dir=/backup/2024060110 --user=root --password=123456 

参数讲解:

  • --backup:指示 XtraBackup 执行备份。
  • --target-dir:指定备份文件的目标目录。
  • --user--password:用于访问 MySQL 数据库的用户凭证。
  1. 准备数据
[root@testdbmy01 /]# xtrabackup --prepare --target-dir=/backup/2024060110

这个准备数据 是干啥的?能不能省略?

既然写了,那肯定是不能省略滴~。原因有以下三个:

  1. 应用事务日志:在备份期间,XtraBackup 会创建一个不一致的备份,因为数据库在备份过程中可能有写操作。为了确保备份的一致性,需要应用事务日志。--prepare 步骤会读取备份中的事务日志文件,并应用这些日志到数据文件,从而使数据文件处于一致状态。
  2. 使备份可恢复:未经 --prepare 处理的备份数据文件是不可恢复的。必须先准备备份,应用所有的事务日志,才能确保恢复时数据文件的一致性。
  3. 支持增量备份 :如果你在全量备份的基础上执行了增量备份,必须先对全量备份执行 --prepare --apply-log-only,然后才能应用增量备份。最后再执行一次 --prepare,使整个备份集可恢复。

上述的备份,涉及的命令,也可以合并在一起。如下,将其放到脚本中了。

使用时,
先设置下这 3个变量:BACKUP_DIRMYSQL_USERMYSQL_PASSWORD
然后,用 root 账号执行就好了,sh export.sh ,是不是很 easy …

cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF

恢复

恢复步骤,更 easy 了,就 1 条命令。

[root@testdbmy01 backup]# xtrabackup --copy-back --target-dir=/backup/2024060110

综合

主要是基于上面的备份恢复步骤,进行一次完整的演示操作。这里主要分为 6个步骤,如下:

  1. 创建 脚本,并执行,完成备份。
  • 创建脚本
cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
  • 执行脚本
## 检查 MySQL 数据库 运行中。
[root@testdbmy01 soft]# ps -ef | grep mysql
root      17601      1  0 11:15 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysql/data --pid-file=/mysql/data/testdbmy01.pid
mysql     18971  17601  0 11:15 pts/1    00:02:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysql/logs/mysql-error.log --open-files-limit=65535 --pid-file=/mysql/data/testdbmy01.pid --socket=/mysql/tmp/mysql.sock --port=3306
root      21242   4833  0 15:11 pts/1    00:00:00 grep --color=auto mysql
[root@testdbmy01 soft]# ## 执行导出
[root@testdbmy01 soft]# sh backup_export.sh 
  1. 停止数据库,并删除库(模拟故障)。
## 停止数据库
[root@testdbmy01 soft]# service mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@testdbmy01 soft]# ## 我怕万一、恢复不出来。我没敢删除(rm -rf),我又偷偷的 mv 了...
[root@testdbmy01 soft]# mv /mysql /mysql_bak202406
[root@testdbmy01 soft]# 
  1. 创建数据库目录&文件
    恢复时,只有databinlog 会自动创建,其他还需手动创建。所以这里一次性全部创建完成。
[root@testdbmy01 soft]# mkdir -p /mysql/{data,binlog,logs,tmp}
[root@testdbmy01 soft]# touch /mysql/logs/{mysql-error.log,mysql-slow.log}
  1. 使用 步骤1 中的备份,进行恢复。
[root@testdbmy01 soft]# xtrabackup --copy-back --target-dir=/backup/2024060115
  1. 设置权限
[root@testdbmy01 soft]# chown -R mysql.mysql /mysql
  1. 启动数据库
[root@testdbmy01 soft]# service mysqld start
Starting MySQL..... SUCCESS! 
[root@testdbmy01 soft]# 

最后,在登录数据库验证一下,就 Okk 了。

增量备份 | 恢复

~ 忒长了~ 已写 9千多字了,我怕~写完,字数太长受限制不能发布,
当前章节、晚会我补链接~~

部分备份 | 恢复

在这里插入图片描述

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

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

相关文章

SpringBoot 单元测试 指定 环境

如上图所示&#xff0c;在配置窗口中添加--spring.profiles.activedev&#xff0c;就可以了。

面试题:SpringBoot启动流程

具体步骤 新建一个Spring应用程序 (new springApplication())&#xff1a; 确认web应用的类型加载ApplicationContextInitializer加载ApplicationListener记录主启动类 运行应用程序&#xff08;.run&#xff09;&#xff1a; 准备环境对象Environment&#xff0c;用于加载…

自监督表示学习和神经音频合成实现语音修复

关键词&#xff1a;语音修复、自监督模型、语音合成、语音增强、神经声码器 语音和/或音频修复的目标是增强局部受损的语音和/或音频信号。早期的工作基于信号处理技术&#xff0c;例如线性预测编码、正弦波建模或图模型。最近&#xff0c;语音/音频修复开始使用深度神经网络&a…

react antd table表格如何获取当前行id

组件库上都有详细的介绍&#xff0c;有自带的一些属性&#xff01;

【EFK日志系统】docker一键部署filebeat、metricbeat

docker一键部署filebeat、metricbeat filebeat部署创建配置文件一键启动修改配置文件查验信息 metricbeat部署创建配置文件一键启动修改配置文件查验信息 上两篇文章写了搭建部署es集群和部署kibana 这篇写一键部署filebeat和metricbeat收集工具 规划服务器是 es01:172.23.16…

PyQt5创建与MySQL数据库集成的应用程序

最近&#xff0c;对之前的mysql管理系统进行了更新升级&#xff0c;制作了一版关于车牌的管理系统&#xff01; &#xff08;1&#xff09;实现了对车牌和用户基本信息的增删改查的功能 &#xff01; &#xff08;2&#xff09;加入了对数据库的刷新和状态显示功能 &#xff…

反向传播算法的详细推导

反向传播算法的详细推导

R19 NR移动性增强概况

随着5G/5G-A技术不断发展和业务需求的持续增强&#xff0c;未来网络的部署将不断向高频演进。高频小区的覆盖范围小&#xff0c;用户将面临更为频繁的小区选择、重选、切换等移动性过程。 为了提升网络移动性能和保障用户体验&#xff0c;移动性增强一直是3GPP的热点课题。从NR…

部署Envoy

Envoy常用术语 envoy文档官网 Life of a Request — envoy 1.31.0-dev-e543e1 documentationhttps://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request#terminology 基础总结 &#xff08;1&#xff09;Envoy Envoy自己本身是工作在L7层的一个proxy&#xff…

ABP框架+Mysql(一)

生成项目 通过用官网的来生成 Get Started | ABP.IO 配上官网地址&#xff0c;需要注意的是&#xff0c;数据库选择Mysql 选择完成后&#xff0c;执行页面上的两条命令 dotnet tool install -g Volo.Abp.Cli abp new Acme.BookStore -dbms MySQL -csf 生成结束后的内容 单击打…

锐捷校园网自助服务-字符过滤存在缺陷

锐捷校园网自助服务-字符过滤存在缺陷 漏洞介绍 令人感到十分遗憾的是&#xff0c;锐捷网络安全应急响应中心对漏洞上报似乎缺少了一些奖励&#xff0c;令人对官方上报漏洞失去了些许兴趣​。 该缺陷仅仅打破了安全检查防护&#xff0c;并没有造成实质性危害&#xff0c;至于…

生成ssh密钥,使用ssh连接linux系统

这里写目录标题 ssh密钥大概介绍1、密钥在哪里生成&#xff08;客户端/服务器&#xff09;&#xff1f;2、密钥生成是什么样子的&#xff1f; ssh &#xff08;生成密钥、密钥传输、配置连接、连接服务&#xff09;过程1、生成密钥提示一&#xff1a;输入保存密钥的文件&#x…

每日一题《leetcode--LCR 022.环形链表||》

https://leetcode.cn/problems/c32eOV/ 我们使用两个指针&#xff0c;fast 与 slow。它们起始都位于链表的头部。随后slow 指针每次向后移动一个位置&#xff0c;而fast 指针向后移动两个位置。如果链表中存在环&#xff0c;则fast 指针最终将再次与slow 指针在环中相遇。 stru…

AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]

一、为什么AR和AP科目需要重分类 1.1 执行操作的前提(重要) 存在AR的当月总余额在贷方&#xff08;客户贷项凭证、预收账款等&#xff09;或AP的当月总余额在借方&#xff08;供应商贷项凭证、预收账款等&#xff09;&#xff0c;这种情况下无法真实的反映出资产和负债情况&…

阿里云语音合成TTS直播助手软件开发

阿里云的TTS比较便宜&#xff0c;效果比不了开源克隆的那种&#xff0c;比纯机器人效果好一点点 阿里云sambert https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13 Sambert系列模型 1万字1元 &#xff0c;每主账号每模型每月3万字免费 创建API-KEY htt…

Linux——多线程(二)

在上一篇博客中我们已经介绍到了线程控制以及对应的函数调用接口&#xff0c;接下来要讲的是真正的多线程&#xff0c;线程安全、线程互斥、同步以及锁。 一、多线程 简单写个多线程的创建、等待的代码 #include<iostream> #include<pthread.h> #include<un…

【C++】list的使用(下)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f525;操作list对象的接口函数&#xff08;opeartions&#xff09;spliceremoveremove_ifuniquemergesortreverse 结语 前言 本篇博客主要内容&#xff1a;STL…

MySQL 自定义函数(实验报告)

一、实验名称&#xff1a; 自定义函数 二、实验日期&#xff1a; 2024年 6 月 1 日 三、实验目的&#xff1a; 掌握MySQL自定义函数的创建及调用&#xff1b; 四、实验用的仪器和材料&#xff1a; 硬件&#xff1a;PC电脑一台&#xff1b; 配置&#xff1a;内存&#…

如何区分解析亚马逊网站产品搜索结果页HTM代码中广告位( Sponsored)和自然位的产品ASIN及排名

在开发亚马逊产品广告排名插件的时候需要通过页面HTML代码分别找出属于广告位和自然搜索结果的产品ASIN及排名&#xff0c;所以需要找到区分广告位和自然搜索结果的HTML代码属性&#xff1a; 所有搜索结果页的产品不管是广告位还是自然位&#xff0c;都包括在 标签里&#xff…

RTPS协议之Behavior Module

目录 交互要求基本要求RTPS Writer 行为RTPS Reader行为 RTPS协议的实现与Reader匹配的Writer的行为涉及到的类型RTPS Writer实现RTPS WriterRTPS StatelessWriterRTPS ReaderLocatorRTPS StatefulWriterRTPS ReaderProxyRTPS ChangeForReader RTPS StatelessWriter BehaviorBe…