MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)

本文主要是介绍MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSDN 成就一亿技术人!

今天讲讲再MySQL中使用percona-xtrabackup这个开源工具来实现在线备份。

CSDN 成就一亿技术人!


目录

介绍percona-xtrabackup

安装Percona

完整备份

备份流程

恢复流程

1.模拟文件损坏

2.滚回日志

3.恢复数据目录

4.授权**

增量备份

备份流程

2月1日(完整)

2月2日(增量)

2月3日(增量)

恢复流程(四步)

差异备份

备份流程(三日)

恢复流程(四步)

常见的报错


介绍percona-xtrabackup

Percona XtraBackup是一个用于MySQL和Percona Server数据库系统的开源工具,它用于执行在线备份。这个工具是由Percona公司开发的,旨在提供一个高性能、可靠且功能丰富的备份解决方案。

  1. 在线备份:Percona XtraBackup可以在数据库运行的同时执行备份,而不会影响数据库的正常运行。这使得系统管理员可以在不停机的情况下创建备份。

  2. 增量备份: 支持增量备份,可以只备份发生变化的数据,减少备份所需的时间和资源。

  3. 支持InnoDB和XtraDB存储引擎: 主要用于备份InnoDB和XtraDB存储引擎的数据。这两个存储引擎是MySQL和Percona Server的默认存储引擎。

  4. 快速恢复: 提供快速且可靠的数据恢复功能,通过使用备份文件进行快速的数据库还原。

  5. 备份验证:XtraBackup会在备份完成后验证备份的一致性,以确保备份文件可用于恢复数据。

  6. 复制和故障转移:Percona XtraBackup可以与数据库复制和故障转移方案集成,使得在分布式系统中轻松实现高可用性。

  7. 支持多种备份存储: 可以将备份存储在本地磁盘、网络共享、Amazon S3等不同的位置。

  8. 可扩展性: 支持大型数据库系统,适用于高流量和大容量的生产环境。

用这款工具来实现Mysql中备份 无疑是最好的选择。

那么如何来安装这款工具呢?

安装Percona

Percona提供了一个YUM仓库,使用户能够方便地安装、更新和管理Percona软件包。

需要通过Percona提供的yum仓库来完成安装Percona XtraBackup 这款工具

以下安装在CentOS7上操作

下载链接
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

下载完成之后查看yum仓库

下载这个主包

yum install -y percona-xtrabackup-test-24.x86_64

下载完成之后查看是否安装成功

yum list | grep percona-xtrabackup

如果这个包前边出现@ 表示安装成功

完整备份

完整备份是指将整个数据库的所有数据和结构都备份到一个文件或一组文件中。

完整备份是一种保证数据库完整性和一致性的强大手段。当需要还原数据库时,可以使用Percona XtraBackup工具进行还原。还原过程涉及解压缩备份文件并将数据应用到数据库目录中。

备份流程

innobackupex --user=root --password=" " /xtrabackup/full命令         用户名    密码(填入mysql密码)  存放的路径(自己设定)

'innobackupex' 提供了一种对 'xtrabackup' 工具进行封装的方式,使得用户能够更轻松地执行备份和还原操作。

查看备份是否成功

ls /xtrabackup/full  (ls 自己的文件夹)

恢复流程

模拟仅仅是测试真机上慎用这条命令

1.模拟文件损坏
systemctl  stop mysql        停止服务
rm -rf /var/lib/mysql/*		清除 MySQL 数据目录

通常先停止 MySQL 服务,    然后再删除内容会更安全

/var/lib//var/lib/mysql/目录是存储 MySQL 或 MariaDB 数据库文件(包括数据文件、日志和其他导入)的常用位置

2.滚回日志
innobackupex --apply-log /xtrabackup/full/2024-01-26_14-11-49/

- 'innobackupex':这是Percona XtraBackup的命令。

- '--apply-log':此选项用于将事务日志应用于备份。它为干净还原准备备份,并使数据库处于一致状态。

- '/xtrabackup/full/2024-01-26_14-11-49//':这是存储完整备份的目录的路径。此目录应包含 XtraBackup 创建的备份文件。

3.恢复数据目录

使用“--apply-log”应用日志后,通常使用“--copy-back”将文件复制回原始数据目录。此步骤将数据库还原到创建备份时的状态。

innobackupex --copy-back /xtrabackup/full/2024-01-26_14-11-49/

- 'innobackupex':Percona XtraBackup 的命令。

- '--copy-back':此选项用于将文件复制回 MySQL 或 Percona Server 数据目录。

- '/xtrabackup/full/2024-01-26_14-11-49/':这是备份文件所在目录的路径。

4.授权**

因为你用的root身份恢复所以属主和属组都是root 启动数据库时候会报错

所以要更改权限

chown -R mysql.mysql /var/lib/mysql    将属主和属组改为mysql

启动mysqld服务之后登录查看数据库和表以及对应的数据即可

增量备份

增量备份是数据库备份策略的一种类型,它只备份自上一次完整备份或增量备份以来发生变化的数据。相比完整备份,增量备份能够减少备份所需的时间和存储空间,同时仍然提供了对整个数据集的完整还原能力。

备份流程

2月1日(完整)

在这个2月1日时间段完整备份一次        第一次完整备份

[root@192 ~]# date 02010000
2024年 02月 01日 星期四 00:00:00 +07
创建一个testdb的数据库 内部创建test的表(内部只有一个1)
mysql> select * from  test;
+------+
| id   |
+------+
|    1 |
+------+
[root@192 ~]# innobackupex --user=root --password=" " /xtrabackup/;

查看第一次备份文件

[root@192 ~]# ls /xtrabackup/		查看
2024-02-01_00-01-59
2月2日(增量)

在2月2日时间段增量备份一次

[root@192 ~]# date 02020000
2024年 02月 02日 星期五 00:00:00 +07往数据库内加入2这个数据
mysql> select * from test;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+[root@192 ~]# innobackupex --user=root -password='' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2024-02-01_00-01-59

查看第二次备份文件(两个文件)

[root@192 xtrabackup]# ls
2024-02-01_00-01-59  2024-02-02_00-10-42
2月3日(增量)

再2.3日再做一次增量备份

[root@192 ~]# date 02030000
2024年 02月 03日 星期六 00:00:00 +07
[root@192 ~]# mysql -uroot -p" " -e "insert into testdb.test values(3);"
在mysql外部执行命令 -e
往表内加入 3这个数据
mysql> select * from  test;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+[root@192 ~]# innobackupex --user=root -password='' --incremental /xtrabackup/ 
--incremental-basedir=/xtrabackup/2024-02-02_00-10-42
基于2月2号做的备份(增量备份)

查看三次备份(三个文件)

[root@192 xtrabackup]# ls
2024-02-01_00-01-59  2024-02-02_00-10-42  2024-02-03_00-06-43

恢复流程(四步)

第一步首先删除(模拟数据丢失)仅仅是模拟 

systemctl  stop mysql        停止服务
rm -rf /var/lib/mysql/*		清除 MySQL 数据目录

第二部 日志回滚

回滚周一的日志
[root@192 ~]# innobackupex  --apply-log --redo-only /xtrabackup/2024-02-01_00-01-59做周二的日志回滚
[root@192 ~]# innobackupex  --apply-log --redo-only /xtrabackup/2024-02-01_00-01-59                 --incremental-dir=/xtrabackup/2024-02-02_00-10-42周三的日志回滚
[root@192 ~]# innobackupex  --apply-log --redo-only /xtrabackup/2024-02-01_00-01-59                 --incremental-dir=/xtrabackup/2024-02-03_00-06-43

第三步恢复目录

我们恢复周一的完整备份 因为我们把所有的日志 跟周一合并一起了
[root@192 ~]# innobackupex --copy-back /xtrabackup/2024-02-01_00-01-59 

第四步授权

chown -R mysql.mysql /var/lib/mysql

启动mysqld 查看数据

差异备份

差异备份是数据库备份策略的一种类型,它记录自上一次完整备份以来发生的所有变更,与增量备份有一些相似之处。然而,差异备份与增量备份的关键区别在于,差异备份始终基于上一次完整备份,而不是基于上一个备份(增量备份)

备份流程

这里看了增量备份之后对基本的命令都有所了解我就一次性解释完

                    首先创建一个表里边写内容
mysql> create table test2(id int);
mysql> insert into test2 values(1);
mysql> select * from testdb.test2;	初始化内容
+------+
| id   |
+------+
|    1 |
+------+10月1日(完整备份)[root@192 ~]# date
2024年 10月 01日 星期二 00:05:37 +07
[root@192 ~]# innobackupex --user=root --password=' ' /xtrabackup
[root@192 xtrabackup]# ls
2024-10-01_00-04-5710月2日(差异备份)
[root@192 ~]# date 10020000
2024年 10月 02日 星期三 00:00:00 +07
在表中追加一个2
mysql> insert into testdb.test2 values(2);
mysql> select * from testdb.test2;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+备份(跟完整备份相差的数据)这时候你会发现这不是增量备份吗??
没错第二次备份的时候 增量备份和差异备份的操作都是一样的[root@192 ~]# innobackupex --user=root --password=" " --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2024-10-01_00-04-57两份文件
[root@192 xtrabackup]# ls
2024-10-01_00-04-57  2024-10-02_00-12-3710月3日(今天我不做备份)
我追加一个3
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+10月4日(差异备份)
我往里边追加一个4
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
[root@192 ~]# innobackupex --user=root --password=" " --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2024-10-01_00-04-57
这时候我基于10月1日做备份 这就叫做差异备份三份备份文件
[root@192 xtrabackup]# ls
2024-10-01_00-04-57  2024-10-02_00-12-37  2024-10-04_00-01-46

恢复流程(四步)

模拟数据丢失
[root@192 ~]# systemctl stop mysqld
[root@192 ~]# rm -rf /var/lib/mysql/*第一步,回滚日志
把10月1日的日志恢复
[root@192 ~]# innobackupex --apply-log --redo-only /xtrabackup/2024-10-01_00-04-57第二步,合并日志
追加合并日志  我把10月4日 日志和并到 10月1日
[root@192 ~]# innobackupex --apply-log --redo-only /xtrabackup/2024-10-01_00-04-57 --incremental-dir=/xtrabackup/2024-10-04_00-01-46第三步,恢复备份
因为我们把10月4日的日志合并到10月1日上
我们只用恢复10月1日的完整备份即可
[root@192 ~]# innobackupex --copy-back /xtrabackup/2024-10-01_00-04-57
第四步,修改权限
[root@192 ~]# chown -R mysql.mysql /var/lib/mysql开启数据库查看
[root@192 ~]# systemctl start mysqld
进入mysql查看

在恢复数据的时候 恢复想要恢复日期 填写对应的日期即可

常见的报错

[root@192 ~]# innobackupex --copy-back /xtrabackup/2024-10-01_00-04-57/
xtrabackup: recognized server arguments: --datadir=/var/lib/mysql 
xtrabackup: recognized client arguments: 
241002 00:27:15 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.At the end of a successful copy-back run innobackupexprints "completed OK!".innobackupex version 2.4.29 based on MySQL server 5.7.44 Linux (x86_64) (revision id: 2e6c0951)
Original data directory /var/lib/mysql is not empty!

解决办法

方法1.    rm -rf /var/lib/mysql/*        删除下的所有文件再次恢复

方法2.     查看你是否把mysql这个文件夹删掉了(如果是在目录下创建mysql即可)

启动数据库报错

Job for mysqld.service failed because the control process exited with error code.See "systemctl status mysqld.service"and
journalctl-xe"for details.报错的情况

进入数据库报错

进入数据库报错
ERROR 2002 (HY000):Can't connect to local MySQL server through
socket /var/lib/mysql/mysql.sock'(2)

解决办法

chown -R mysql.mysql /var/lib/mysql                更改属主和属组
systemctl restart mysqld

这篇关于MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传