恢复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…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...