物理备份的方式

完全备份恢复流程

  1. 停止数据库
  2. 清理环境
  3. 重演回滚--> 恢复数据
  4. 修改权限
  5. 启动数据库
    1.关闭数据库:
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*		//删除所有数据//
[root@mysql-server ~]# rm -rf /var/log/mysqld.log
[root@mysql-server ~]# rm -rf /var/log/mysql-slow/slow.log

2.重演恢复:

[root@mysql-server ~]# innobackupex --apply-log /xtrabackup/full/2021-12-07_14-31-13

3.确认数据库目录: 恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里
cat /etc/my.cnf
[mysqld] datadir=/var/lib/mysql
4.恢复数据:
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/full/2021-12-07_14-31-13

5.修改权限:
[root@mysql-server ~]# chown mysql.mysql /var/lib/mysql -R
启动数据库:
[root@mysql-server ~]# systemctl start mysqld
6.确认数据是否恢复

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| chenge             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+5 rows in set (0.00 sec)mysql> use chenge;
Database changedmysql> show tables;
+--------------------+
| Tables_in_chenge |
+--------------------+
| t1                 |
+--------------------+
1 row in set (0.00 sec)
===可以看到数据已恢复===

增量备份流程

原理:每次备份上一次备份到现在产生的新数据,基于上一次备份的时间点到现在

  1. 停止数据库
  2. 清理环境
  3. 依次重演回滚redo log--> 恢复数据
  4. 修改权限
  5. 启动数据库
    1.完整备份:周一
[root@mysql-server ~]# rm -rf /xtrabackup/*
[root@mysql-server ~]# innobackupex --user=root --password='qf123' /xtrabackup
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40
[root@mysql-server xtrabackup]# cd 2022-01-10_14-10-40/
[root@mysql-server 2022-01-10_14-10-40]# ls
backup-my.cnf  ib_buffer_pool  mysql               sys   testdb                  xtrabackup_info
company        ibdata1         performance_schema  test  xtrabackup_checkpoints  xtrabackup_logfile

2、增量备份:周二 —— 周三
在数据库中插入周二的数据:

mysql> insert into testdb.t1 values(2);    #模拟周二
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_14-10-40/
--incremental-basedir:基于哪个增量
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40  2022-01-10_14-16-16    ---相当于周二的增量备份
在数据库中插入周三的数据:
mysql> insert into testdb.t1 values(3);   #模拟周三
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_14-16-16/      #基于前一天的备份为目录
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40  2022-01-10_14-16-16  2022-01-10_14-19-59   ---相当于周三的增量备份

查看一下备份目录:

[root@mysql-server ~]# ls /xtrabackup/
2022-01-10_14-10-40  2022-01-10_14-16-16  2022-01-10_14-19-59全备周一             增量周二               增量周三
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*
依次重演回滚redo log:
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-10-40
周二 ---  周三
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-10-40 --incremental-dir=/xtrabackup/2022-01-10_14-16-16
--incremental-dir:增量目录
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-10-40 --incremental-dir=/xtrabackup/2022-01-10_14-19-59/
恢复数据:
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2022-01-10_14-10-40/
修改权限
[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld
登陆上去看一下:

差异备份流程

清理备份的环境:

[root@mysql-server ~]# rm -rf /xtrabackup/*
登陆数据库,准备环境
mysql> delete from testdb.t1;
mysql> insert into testdb.t1 values(1);    #插入数据1,模拟周一
mysql> select * from testdb.t1;
+------+
| id   |
+------+
|    1 |
+------+
mysql> \q
查看时间:
[root@mysql-server ~]# date
Tue Aug 20 15:39:59 CST 2019
1、完整备份:周一
[root@mysql-server ~]# innobackupex --user=root --password='qf123' /xtrabackup
2、差异备份:周二 —— 周三
语法: # innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周一)
3.修改时间:
[root@mysql-server ~]# date 08211543
Wed Aug 21 15:43:00 CST 2019
4.在登陆mysql:
mysql> insert into testdb.t1 values(2);  #插入数据2,模拟周二
差异备份周二的
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/  #备份目录基于周一的备份
5.再次登陆mysql
mysql> insert into testdb.t1 values(3);  #插入数据,模拟周三
6.在次修改时间
[root@mysql-server ~]# date 08221550
Thu Aug 22 15:50:00 CST 2019
7.在次差异备份
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/  #还是基于周一的备份
8.延申到周四
mysql> insert into testdb.t1 values(4);
9.修改时间
[root@mysql-server ~]# date 08231553
Fri Aug 23 15:53:00 CST 2019
10.差异备份周四
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/   #还是基于周一的备份
11.查看一下备份目录
[root@mysql-server ~]# ls /xtrabackup/
2022-01-10_14-34-07  2022-01-10_14-36-09  2022-01-10_14-38-45  2022-01-10_14-39-18周一                   周二                   周三               周四

差异备份恢复流程

  1. 停止数据库
  2. 清理环境
  3. 重演回滚redo log(周一,某次差异)--> 恢复数据
  4. 修改权限
  5. 启动数据库
    停止数据库
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*
1.恢复全量的redo log
语法: # innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-34-07/
2.恢复差异的redo log
语法:# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)--incremental-dir=/xtrabacku/某个差异备份
这里我们恢复周三的差异备份
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-34-07/ --incremental-dir=/xtrabackup/2022-01-10_14-38-45/   #我们恢复周三的差异备份
3.恢复数据
语法:# innobackupex --copy-back /xtrabackup/完全备份目录(周一)
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2022-01-10_14-34-07/
修改权限:
[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld

登陆mysql查看一下:
image-20230807234228290
只有123.因为我们恢复的是周三的差异备份。

增量:基于上一次备份
innobackupex --user=root --password=‘qf123’ --incremental /xtrabackup --incremental-basedir=/xtrabackup/上一次备份的 文件/
差异:基于第一次完备
innobackupex --user=root --password=‘qf123’ --incremental /xtrabackup --incremental-basedir=/xtrabackup/完整备份的文件/

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

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

相关文章

常用ADB命令整理已经ADB键盘输入

我们在测试Android app过程中 需要经常更换安装包的操作 熟练使用ADB命令可以提升测试效率 * 查看设备 adb devices ps这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 若有多台安卓设备&#xff0c;可以通过在adb后面加上 -s <设备id>…

java-kotlin踩坑:错误:找不到符号(点击能跳转到对应类中)

问题描述&#xff1a; 在android用java调用一个kotlin定义的类时&#xff0c;导包正常&#xff0c;点击也能跳转到对应类中&#xff0c;但是在编译运行时会报错&#xff0c;提示找不到符号 解决方法&#xff1a; 第一步&#xff1a;在app级别的build.gradle中添加kotlin-and…

【算法与数据结构】684、685、LeetCode冗余连接I II

文章目录 一、684、冗余连接 I二、685、冗余连接 II三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、684、冗余连接 I 思路分析&#xff1a;题目给出一个无向有环图&#xff0c;要求去掉一个边以后构成一个树&#xf…

【Linux】 login命令使用

login命令 在 Linux 中用于创建一个新的会话&#xff0c;并在新会话中登录用户。这个命令通常在终端中自动执行&#xff0c;当你打开一个新的终端会话或者通过 SSH 远程连接到 Linux 服务器时。 在命令后面附加欲登入的用户名称&#xff0c;它会直接询问密码&#xff0c;等待…

提示工程(Prompt Engineering)、微调(Fine-tuning) 和 嵌入(Embedding)

主要参考资料&#xff1a; 还没搞懂嵌入&#xff08;Embedding&#xff09;、微调&#xff08;Fine-tuning&#xff09;和提示工程&#xff08;Prompt Engineering&#xff09;&#xff1f;: https://blog.csdn.net/DynmicResource/article/details/133638079 B站Up主Nenly同学…

几种常见的配置文件格式,以及它们的优缺点和用法汇总

文章目录 1. INI2. XML3. JSON4. YAML5. TOML结论 配置文件是用于存储软件程序、操作系统或服务器等的设置的文件。不同的配置文件格式具有不同的结构和语法&#xff0c;选择哪种格式通常取决于具体的应用需求、易用性、可读性以及环境支持。以下是几种常见的配置文件格式&…

【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)

基于Springboot的智慧外贸平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧外贸平台 本系统分为系统功能模块、管理员功能模块、买家功能模块以及商家功能模块。 系统功能模块&#xff1a;在平台首页可以…

Atcoder ABC340 A-D题解

比赛链接:ABC340 话不多说&#xff0c;看题。 Problem A: 签到。 #include <bits/stdc.h> using namespace std; int main(){int a,b,d;cin>>a>>b>>d;for(int ia;i<b;id)cout<<i<<endl;return 0; } Problem B: 还是签到题。一个v…

L4 级自动驾驶汽车发展综述

摘要:为了减小交通事故概率、降低运营成本、提高运营效率,实现安全、环保的出行,自动驾驶 技术的发展已成为大势所趋,而搭配有L4 级自动驾驶系统的车辆是将车辆驾驶全部交给系统。据此,介绍了自动驾驶汽车的主流技术解决方案;分析了国内外L4 级自动驾驶汽车的已发布车型、…

HQYJ 2024-2-23 作业

自己实现单向循环链表的功能 整理思维导图 复习前面顺序表和链表的代码&#xff0c;重写链表逆置函数 1.实现单向循环链表的功能 loop_link_list.h文件 #ifndef __LOOP_LINK_LIST__ #define __LOOP_LINK_LIST__ #include<stdio.h> #include<stdlib.h> typedef…

SOCKS5、代理 IP、HTTP 在软件工程中的应用

在当今数字化时代&#xff0c;网络安全是软件工程领域中至关重要的话题之一。本文将深入探讨 SOCKS5 代理、代理 IP、HTTP 代理等网络代理技术&#xff0c;以及它们在软件工程中的应用&#xff0c;强调网络安全的重要性&#xff0c;并提供一些实用的建议。 1. SOCKS5 代理&…

基础爬虫篇

文章目录 爬虫介绍requsets模块和快速使用携带请求头携带cookie的两种方式post携带参数模拟登录 取出cookie和处理cookie响应对象证书使用代理超时 异常处理 上传文件 爬虫介绍 # 爬虫是什么&#xff1f;-通过编程技术---》把互联网中的数据---》获取到---》数据清洗---》存到…

一次路由多次交换的概念与用处

“一次路由多次交换”是指在网络中&#xff0c;数据包首次被路由后&#xff0c;随后相同流的数据包在二层通过交换方式传输&#xff0c;不再需要路由处理。 具体来说&#xff0c;这个过程涉及到以下几个关键点&#xff1a; 路由与交换&#xff1a;路由是指根据IP地址将数据包…

第2讲:C语言数据类型和变量

第2讲&#xff1a;C语言数据类型和变量 目录1.数据类型介绍1.1字符型1.2整型1.3浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2.signed 和 unsigned3.数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5…

oracle中trim函数、ltrim函数、rtrim函数的使用方法,trim()函数、ltrim ()函数、rtrim()函数的用法

在oracle中&#xff0c;trim()函数的用法有,leading 开头字符&#xff0c;trailing 结尾字符&#xff0c;both 开头和结尾字符&#xff0c;如下&#xff1a; trim(leading || trailing || both 将要被替换掉的字符" from “将要被替换的字符串") 1、trim函数去除指…

opencv判断二值的情况

目的 先说说理论&#xff1a; 什么叫图像的二值化&#xff1f;二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0&#xff08;黑色&#xff09;或者255&#xff08;白色&#xff09;&#xff0c;也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0…

kafka为什么性能这么高?

Kafka系统架构 Kafka是一个分布式流处理平台&#xff0c;具有高性能和可伸缩性的特点。它使用了一些关键的设计原则和技术&#xff0c;以实现其高性能。 上图是Kafka的架构图&#xff0c;Producer生产消息&#xff0c;以Partition的维度&#xff0c;按照一定的路由策略&#x…

人工智能和机器学习中深度学习、自然语言处理、计算机视觉详细介绍和java代码实现、数据模型训练

人工智能和机器学习领域详细介绍及Java代码实现 1. 深度学习 介绍: 深度学习是一种机器学习技术,通过多层神经网络对数据进行学习和表征。Java实现: 使用深度学习库如DL4J(DeepLearning4j)来构建和训练深度神经网络模型。数据模型训练: 示例代码如下:public class Deep…

C++力扣题目 392--判断子序列 115--不同的子序列 583--两个字符串的删除操作 72--编辑操作

392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;&quo…

代码随想录算法训练营day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 基于左边界排序 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:count 0 # 需要移除的区间数量intervals.sort(keylambda x: x[0])for i in range(1, len(intervals)):if intervals[i][0] < intervals[i-1][1]…