恢复MySQL!是我的条件反射,PXB开源的力量...
📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
文章目录
- 📣 1.PXB的安装
- 📣 2.全备和恢复
- ✨ 2.1 环境准备
- ✨ 2.2 全量备份
- ✨ 2.3 全备的恢复
- 📣 3.增量备份和恢复
- ✨ 3.1 全量备份
- ✨ 3.2 一级增量备份
- ✨ 3.3 二级增量备份
- ✨ 3.4 恢复数据
- 📣 4.压缩备份与还原
Xtrabackup 是由 Percona 公司提供的一款 MySQL 数据库备份恢复工具
📣 1.PXB的安装
rpm -ivh percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm --nodeps --force
which xtrabackup
xtrabackup --version
常用选项:
–host 指定主机
–user 指定用户名
–password 指定密码
–port 指定端口
–databases 指定数据库
–incremental 创建增量备份
–incremental-basedir 指定包含完全备份的目录
–incremental-dir 指定包含增量备份的目录
–apply-log 对备份进行预处理操作
–defaults-file 指定默认配置文件,默认是读取/etc/my.cf
📣 2.全备和恢复
Percona Xtrabackup 8.0版本移除了 innobackupex 命令
innobackupex且只能备份 8.0 以下版本的 MySQL,实际中使用 xtrabackup 命令来备份8.0的版本
2.4 版本支持 MySQL 5.11 , 5.5, 5.6 和 5.7 的版本
–说明:
prepare 的作用一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。 因此,此时数据文件仍处于不一致状态。
“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
在实现“准备”的过程中,xtrabackup 通常还可以使用–use-memory 选项来指定其可以使用的内存的大小,默认通常为 100M。如果有足够的内存可用,可以多划分一些内存给 prepare 的过程,以提高其完成速度。
xtrabackup 命令的–copy-back 选项用于执行恢复操作,其通过复制所有数据相关的文件至 mysql 服务器 DATADIR 目录中来执行恢复过程。
最后一步也可以使用 OS 的 cp 命令来替代!!
当数据恢复至 DATADIR 目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,
如 mysql, 否则,在启动 mysqld 之前还需要事先修改数据文件的属主和属组。
✨ 2.1 环境准备
create database ceshi character set utf8mb4;
create table ceshi.articles (id int primary key auto_increment,content longtext not null) ENGINE=InnoDB;
insert into ceshi.articles (id,content) values (11,‘hahahahahaha’),(12,‘xixixixixix’),(13,‘aiaiaiaia’),(14,‘hohoahaoaooo’);
mysql> select * from ceshi.articles;
+----+--------------+
| id | content |
+----+--------------+
| 11 | hahahahahaha |
| 12 | xixixixixix |
| 13 | aiaiaiaia |
| 14 | hohoahaoaooo |
+----+--------------+
4 rows in set (0.00 sec)
✨ 2.2 全量备份
mkdir -p /bk/
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/bk/full
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/bk/full_$(date +%Y%m%d)
–说明:
比如MySQL版本为MySQL 8.0.28版本,Percona XtraBackup版本也是下载8.0.28版本,如果不匹配不过,根据官方文档,Percona XtraBackup 8.0.21开始,新增了–no-server-version-check 参数。
此参数控制是否将源系统版本与 Percona XtraBackup 版本进行比较。
为了区分全备,可以使用full_$(date +%Y%m%d)来作为备份目录
✨ 2.3 全备的恢复
第一步:xtrabackup --prepare --target-dir=/bk/full
第二步:此时关闭数据库
systemctl stop mysqld
mysqladmin shutdown -uroot -proot
第三步:copy-back
[root@centos79 ~]# cd /var/lib
[root@centos79 lib]# tar -cf mysql.tar mysql
[root@centos79 lib]# mv mysql.tar /opt
[root@centos79 lib]# rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/bk/full --datadir=/var/lib/mysql
–说明:
不要直接删除mysql的数据目录,一般tar之后转移到其他目录,防止恢复失败
要压缩整个目录,可以使用以下命令:
tar -cf archive.tar directory
重启MySQL
chown -R mysql:mysql /var/lib/mysql
mysqld_safe & --二进制环境
systemctl start mysqld --rpm环境登陆MySQL
mysql -uroot -pmysql> select * from ceshi.articles;
+----+--------------+
| id | content |
+----+--------------+
| 11 | hahahahahaha |
| 12 | xixixixixix |
| 13 | aiaiaiaia |
| 14 | hohoahaoaooo |
+----+--------------+
4 rows in set (0.01 sec)--以上全备全部成功,恢复OK
📣 3.增量备份和恢复
需要注意的是,增量备份仅能应用于 InnoDB 或 XtraDB 表,对于 MyISAM 表而言,执行增量备份时其实进行的是完全备份。
“准备”(prepare)增量备份与完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
在增量备份命令中,–incremental-basedir 指的是上一次的增量备份所在的目录。若是一级增量备份,则指向全备的目录。
✨ 3.1 全量备份
先进行全备:
mkdir -p /backup
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/backup/full
–插入数据
insert into ceshi.articles (id,content) values (110,‘bbbbbbb’),(111,‘ccccc’),(112,‘aaaaaa’),(113,‘dddddddd’);
✨ 3.2 一级增量备份
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full
解释:
target-dir=/backup/inc1中的inc1目录不用自己创建
–incremental-basedir=/backup增备份是在全备的基础上做得,这个参数是填全备的路径,全备和增备的目录要分开,不能放在一起。
✨ 3.3 二级增量备份
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
–说明:
incremental-basedir=/inc1/inc1,这里的参数是参照增备1里备份的,所以这个参数是填增备1的路径。
备份好后会在/backup出现3个目录,一个是全备的数据,还有个增备1的数据,还有个增备2的数据。
[root@centos79 ~]# ll /backup
total 12
drwxr-x— 6 root root 4096 Apr 15 05:58 full
drwxr-x— 6 root root 4096 Apr 15 06:01 inc1
drwxr-x— 6 root root 4096 Apr 15 06:05 inc2
✨ 3.4 恢复数据
1.准备还原命令:
xtrabackup --prepare --apply-log-only --target-dir=/backup/full/
xtrabackup --prepare --apply-log-only --target-dir=//backup/full/ --incremental-dir=/backup/inc1/
xtrabackup --prepare --target-dir=/backup/full/ --incremental-dir=/backup/inc2/
2.恢复数据
模拟删除数据库
mysql> drop database ceshi;
systemctl stop mysqld
rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/backup/full --datadir=/var/lib/mysql
3.再次确认恢复到数据
[root@centos79 ~]# chown -R mysql:mysql /var/lib/mysql
[root@centos79 ~]# systemctl start mysqld
[root@centos79 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.35 MySQL Community Server - GPLCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select * from ceshi.articles;
+------+--------------+
| id | content |
+------+--------------+
| 11 | hahahahahaha |
| 12 | xixixixixix |
| 13 | aiaiaiaia |
| 14 | hohoahaoaooo |
| 110 | bbbbbbb |
| 111 | ccccc |
| 112 | aaaaaa |
| 113 | dddddddd |
| 1110 | bbbbbbb |
| 1111 | ccccc |
| 1112 | aaaaaa |
| 1113 | dddddddd |
+------+--------------+
12 rows in set (0.00 sec)
📣 4.压缩备份与还原
选项即可 此外,在执行本地备份时,
还可以使用–parallel=4选项对多个文件进行并行复制。此选项用于指定在复制时启动的线程数目。
当然,在实际进行备份时要利用此功能的便利性,也需要
启用 innodb_file_per_table 选项或共享的表空间通过 innodb_data_file_path 选项存储在多个 ibdata 文件中。
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --parallel=4 --compress --compress-threads=4 --stream=xbstream > /bk/jeames_full_backup.qp --no-server-version-check
解释:
如果要加速压缩,可以使用–compress-threads=4 ,使用四个线程同时进行压缩
compress就是压缩的命令,因为数据库的备份的数据比较大,占用的空间也比较多,而压缩就能减少文件大小
解压工具是qpress
[root@centos79 opt]# tar -xvf qpress-11-linux-x64.tar
qpress
[root@centos79 opt]# mv qpress /usr/bin/qpress
[root@centos79 opt]# which qpress
/usr/bin/qpressxbstream -x < /bk/jeames_full_backup.qp -C /bk#解压操作
[root@centos79 opt]# rpm -ivh zstd-1.5.5-1.el7.x86_64.rpm
[root@centos79 opt]# zstd --version
*** Zstandard CLI (64-bit) v1.5.5, by Yann Collet ***
xtrabackup --parallel 4 --decompress --target-dir=/bk
find /bk/ -name '*.qp' | xargs rm -f --删除原来的压缩包解压的原来的文件不会被删除,可以使用 --remove-original选项清除#恢复操作
xtrabackup --prepare --target-dir=/bk/full
--此时关闭数据库 systemctl stop mysqld
xtrabackup --copy-back --target-dir=/bk/full --datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
相关文章:

恢复MySQL!是我的条件反射,PXB开源的力量...
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
Storm详细配置
一、认识Storm Apache Storm是个实时数据处理的“大能”,它可以实时接收、处理并转发大量数据流,就像一个高速运转的物流中心,确保数据及时、准确地到达目的地。我们要做的,就是把这个物流中心搭建起来,并且根据我们的…...
linux redis部署教程
单节点部署: 单节点部署 Redis 非常简单,只需要在一台服务器上安装 Redis 服务即可。以下是在 Linux 环境下的单节点部署步骤: 安装 Redis:打开终端,并执行以下命令来更新软件包列表并安装 Redis 服务器:…...
【Java】隐式锁(synchronized):如何解决餐厅等座的并发难题
当你走进一家熙熙攘攘的餐厅,准备享受一顿美味的晚餐时,你是否曾想过,这里正上演着一场场微观的线程战争?在这个场景中,每一张桌子都代表着珍贵的共享资源,而每一位顾客(线程)都在争…...

科技论文和会议录制高质量Presentation Video视频方法
一、背景 机器人领域,许多高质量的期刊和会议(如IEEE旗下的TRO,RAL,IROS,ICRA等)在你的论文收录后,需要上传一个Presentation Video材料,且对设备兼容性和视频质量有较高要求&#…...

Spring高手之路17——动态代理的艺术与实践
文章目录 1. 背景2. JDK动态代理2.1 定义和演示2.2 不同方法分别代理2.3 熔断限流和日志监控 3. CGLIB动态代理3.1 定义和演示3.2 不同方法分别代理(对比JDK动态代理写法)3.3 熔断限流和日志监控(对比JDK动态代理写法) 4. 动态代理…...
如何在Unity中使用设计模式
在 Unity 环境中,设计模式是游戏开发人员遇到的常见问题的通用解决方案。将它们视为解决游戏开发中特定挑战的经过验证的模板或蓝图。以下是一些简单易懂的设计模式: 1. 单例=> 单例模式确保一个类只有一个实例,并提供对该实例的全局访问点。在 Unity 中,可以使用单例模…...

基于springboot+vue+Mysql的旅游管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

vue3+ts中判断输入的值是不是经纬度格式
vue3ts中判断输入的值是不是经纬度格式 vue代码: <template #bdjhwz"{ record }"><a-row :gutter"8" v-show"!record.editable"><a-col :span"12"><a-input placeholder"经度" v-model:v…...
python常用知识总结
文章目录 1. 常用内置函数1. ASCII码与字符相互转换 1. 常用内置函数 1. ASCII码与字符相互转换 # 用户输入字符 c input("请输入一个字符: ")# 用户输入ASCII码,并将输入的数字转为整型 a int(input("请输入一个ASCII码: "))print( c &qu…...
常用的启发式算法
A算法:在电子地图导航软件中,当你输入目的地时,软件就会利用A算法来计算从现在的位置到目的地的最佳路径。该算法兼顾了路径的优化以及计算速度,保证了结果的准确性以及反馈的实时性。 模拟退火算法:模拟退火算法常被…...

应该如何进行POC测试?—【DBA从入门到实践】第三期
在数据库选型过程中,为确保能够灵活应对数据规模的不断扩大和处理需求的日益复杂化,企业和技术人员会借助POC测试来评估不同数据库系统的性能。在测试过程中,性能、并发处理能力、存储成本以及高可用性等核心要素通常会成为大家关注的焦点&am…...
通过Clojure中的集合与序列谈谈抽象的重要
与君共勉:生命不息,学习不止,切忌浮躁,静下心来,每天进步一点点。 Clojure简介 Clojure是一门运行在JVM上面的Lisp方言,其它的Lisp方言还有Scheme、Common Lisp等。Lisp相关的著名书籍有《计算机程序的构…...
Rust---模式(Pattern)匹配
目录 模式是什么它用来做什么模式匹配和赋值为什么会有模式匹配模式匹配用在什么地方match 表达式if let表达式while let表达式for 循环let 语句函数参数不可驳模式匹配和可驳模式匹配模式是什么 在Rust中,模式(Pattern)是一种用于匹配和解构数据的语法结构。模式匹配中常用…...

MATLAB 计算点投影到平面上的坐标(59)
MATLAB 计算点投影到平面上的坐标(59) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 点投影到平面,计算投影点的坐标,下面提供MATLAB版本的计算程序,直接运行即可,内有验证数据,具体看代码即可。 二、算法实现 1.代码 代码如下(示例): % 平面上的三个点分…...

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题文档与程序
2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现: 甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文…...
嵌入式与移动物联网开发教程和案例
一、嵌入式与移动物联网概述 嵌入式系统是指嵌入到设备中的专用计算机系统,用于控制、监视或辅助设备操作。而移动物联网则是指通过物联网技术将各种智能设备与互联网连接起来,实现设备之间的互联互通和智能化管理。嵌入式与移动物联网技术的结合&#…...
AttachVoExample
目录 1、 AttachVoExample 1.1、 GeneratedCriteria 1.2、 addCriterion 1.3、 andFnameGreaterThanOrEqualTo 1.4、 GeneratedCriteria Atta...
图像处理特征提取
图像处理中的特征提取是指从图像数据中提取出具有区分性和代表性的特征,以用于图像分类、目标检测、图像匹配等任务。下面介绍几种常见的图像处理特征提取方法: 颜色特征:颜色是图像中最直观且重要的特征之一。常见的颜色特征提取方法包括颜色…...

前端大屏适配几种方案
一、方案一:remfont-size 动态设置HTML根字体大小和body字体大小,会使用到lib-flexible.js插件lib-flexible.js (function flexible(window, document) {var docEl document.documentElementvar dpr window.devicePixelRatio || 1// adjust body font…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...