MySQL数据库备份,恢复

备份策略不同,恢复方式也不同。

在进行数据备份的时候,能使用冷备份就使用冷备份,安全可靠,

但是冷备份自己的缺点是【每一个数据库都对应着一个前端的业务】此时前端业务停止可能带来经济损失。

一.备份类型

根据服务是否在线,来进行备份类型的分类。【针对MySQL】

1.热备份

服务处于在线状态,正常进行数据读写操作,同时备份数据

2.冷备份

服务不在线,备份数据,备份完成后重新打开服务

3.温备份

服务在线,只能进行查询操作,同时备份数据

通过锁表的方式进行实现

根据备份的数据量的多少,来进行备份类型的分类。【适用于全部应用到备份概念的地方】

1.完全备份

每次备份的时候,备份所有数据。

2.增量备份【增量备份除了需要和完全备份去比,还要和上一次的增量备份去比。】

第一:备份完全备份之后,变化的数据

第二:备份上一次增量备份后变化的数据

假设是以完全备份加上增量备份的方式去进行数据备份,

如上图所示,当你的数据备份方式采用如上的完全备份+增量备份的方式去进行数据备份的时候,

第一天完全备份是备份所有的数据

第二天增量备份是备份完全备份之后变化的数据

第三天增量备份是备份增量备份之后变化的数据

备份策略不同,恢复方式也不同。

所以当数据丢失需要进行数据恢复的时候,应该从第一天完全备份开始进行数据恢复,此时恢复了所有第一次进行完全备份的数据,

然后按照第一次增量备份的数据,恢复第一次增量备份时的数据,此时恢复了所有第二次进行数据备份的数据。

最后按照最后一次数据备份时备份的数据,进行数据备份,此时恢复了所有第三次进行数据备份的数据。

3.差异备份【差异备份永远是跟最近一次的完全备份之后的数据去比。】

备份完全备份之后所有变化的数据。

假设是以完全备份加上差异备份的方式去进行数据备份,

备份策略不同,恢复方式也不同。

此时如果发生数据丢失,需要进行数据还原的时候,首先应该从第一次完全备份的时候进行数据恢复。然后直接去恢复最后一次的差异备份就可以了。

【公司的备份策略可能是这样的一天进行一次完全备份,每隔一个小时进行一次增量备份或者是差异备份。】【如果备份策略是完全+增量备份的话,当数据丢失的时候,是需要逐一恢复数据才可以】【如果备份策略是完全+差异的话,当数据丢失的时候,只需要恢复两次数据,第一次恢复数据是恢复完全备份时的数据,第二次恢复数据是最后一次恢复差异备份时的数据】

在Linux操作系统中scp是一个完全传输工具,每次拷贝的时候都是拷贝的所有数据。

在Linux操作系统中rsync是一个增量传输工具,每次只传输更改过的部分,极大提高了效率。

最后一种分类根据备份的结果来分。【只适用于MySQL】

1.逻辑备份  【针对MySQL】

生成数据操作的SQL语句。

从备份数据的速度来说,逻辑备份的速度要比物理备份的速度要快得多。

备份出来的结果是一大堆的SQL语句。

逻辑备份的结果就是一个普通的文本文件.【文本文件中保存的就是】

如上图所示,这个sql文件就是一个逻辑备份的结果。这个sql文件是一个文本文件,其中记录的是一大堆的SQL语句。

如上图所示,这个mysqldump这个工具就是MySQL数据库准备的一个逻辑备份工具。

2.物理备份【类似于使用cp这样的工具】

直接备份数据文件

如上图所示,这个物理备份工具需要额外下载。

我们在进行数据备份的时候,该备份哪些数据?

表的数据和索引,表的结构,配置文件,二进制日志,触发器,存储过程。

如上图所示,这个mysql数据库下的frm文件存储的是表结构,ibd存储的是表的数据和表的索引,

二.逻辑备份工具mysqldump常用选项的介绍。

如上图所示,此时有一些mysqldump的常用选项。

1.常用选项

1.备份所有数据库【使用这个工具做完全备份就是使用的这个选项。】

--all-databases

如上图所示,此时将所有数据库的SQL语句都重定向到一个sql文件中,。

2.备份指定的数据库【备份单个的数据库】

--database  数据库名称

3.在备份文件中记录数据库当前正在使用的二进制日志文件名称,最后一个事件的position

1.是这行信息在sql文件中是非注释内容。【方便后续去配置数据库的主从复制】

2.是这行信息在sql文件中是注释内容。

--master-data={1|2}这个值等于1或者2

如果在进行逻辑备份的时候加上这样一个选项--master-data={无论是等于1或者2}

都会在sql备份文件的结尾加上这样一行信息:

change  master  to  二进制日志文件名称, 事件位置

当--master-data=2的时候这行信息在sql文件中是一个注释,

当--master-data=1的时候,这行信息在sql文件中不是一个注释。

如上图所示,这是--master-data=1的时候,这行信息在sql文件中不是一个注释。

这行信息的作用:

能看到备份数据的时候,此时数据库所使用的二进制日志文件,以及最后一个事件的位置。

比如说此时最后一个事件的位置是154,这就意味着从我备份完成之后数据库再次进行写操作的时候,是从154开始记录的。这个最后一个事件的位置,方便我们后续的增量备份和差异备份。

4.生成新的二进制日志文件 【同样是为了方便后续做差异备份和增量备份。】

--flush-logs

这里的3和4选项二选其一就可以,都是为了方便后续做增量备份和差异备份。

如上图所示,这是查看当前这个数据库正在使用哪个二进制日志文件,以及最后一个事件的位置。

5.锁表

之后这个表只能进行查询操作,其他操作都不能进行。

--lock-all-tables

如上图所示,这个选项就是同时备份这张表上的触发器。【这个选项默认就是启用的】

6.备份存储过程

--routines

mysqldump -uroot -p密码  --all-databases --master-data=2 --lock-all-tables > 备份文件

建议将备份文件单独保存到一个硬盘上,单独保存到一个存储设备上。

可以单独的把备份文件保存在一个NFS服务器上,或者说把备份文件保存在一个单独的磁盘阵列柜上。

三.案例:完全+增量备份

1.准备存储备份文件的设备

如上图所示,将整块盘都格式化为ext4的文件系统。

如上图所示,这是将块设备/dev/sdd/挂载到/mysql/backup/作为专门存放备份文件的磁盘。

同时因为这个块设备是ext4的文件系统,所以会自动生成一个lost+found这个目录,我们需要把这个目录删除,此时这个/mysql/backup/MySQL软件才能正常使用。

2.模拟周一完全备份的案例

如上图所示,这是一个完全备份的案例。

如上图所示,这个文件就是一个模拟周一完全备份的文件,

3.登录数据库,模拟写操作;进行周二的增量备份

如上图所示,这就是周二数据库这个表发生的数据改变。

增量备份需要将第一次完全备份之后变化的数据保存下来。

增量备份实现的方式就是使用二进制日志,就是把二进制中记录下的周二的修改操作备份一下,

那么这里就有一个问题了?

从哪个事件位置进行增量备份?

如上图所示,这就是我第一次完全备份时候所使用的二进制日志文件,以及最后一次事件的位置。

也就是说数据库之后在发生所有的写操作都是由6152开始的,

也就是增量备份的操作就是把这个二进制日志文件中从6152之后的所有写操作都备份下来,就完成了一次增量备份。

如上图所示,此时将二进制日志文件中事件位置为6152之后的事件都重定向到二进制日志目录下,并且这个文件的名称以时间命名。

4.登录数据库,模拟写操作,进行周三的增量备份

如上图所示,这是周三数据库数据发生的一些变化,我们需要将产生这些变化的事件记录下来。

如上图所示,此时我们可以去查看周二的这个备份文件,这个备份文件中最后一个事件的终止位置是哪里,我们就需要从二进制日志文件的对应位置到最后的所有写操作都备份下来。

如上图所示,此时这个周二的备份文件的最后一个事件终止位置是6512,

如上图所示,此时就完成了周三的增量备份,

5.登录数据库,模拟写操作,模拟数据库故障。

如上图所示,这是登录数据库,然后更新教务库的教师表的数据。这是周四的操作。

如上图所示,这是模拟数据库故障,然后把数据库数据目录下的所有数据全部删除,

6.进行MySQL数据库数据恢复

(1)恢复MySQL数据库正常运行。

想让MySQL进行数据恢复,还需要将MySQL数据库启动,但是MySQL数据库启动还需要生成MySQL数据库必须的数据表和数据库,此时就需要手动初始化数据库。

如上图所示,此时MySQL数据库初始化完成。

MySQL数据库启动所必须的数据库和数据表都有,此时可以启动MySQL数据库进行数据恢复操作。

如上图所示,此时MySQL数据库启动成功,并且在初始化数据库之后,还需要修改root用户的密码。

(2)恢复周一的完全备份

如上图所示,这是一种导入sql文件到MySQL数据库的方式。

如上图所示,此时MySQL数据库进行周一的完全备份数据恢复。

(3)恢复周二的增量备份

如上图所示,这是MySQL数据库进行周二的增量备份数据恢复。

(4)恢复周三的增量备份

如上图所示,这是MySQL数据库进行周三的增量备份数据恢复。

(5)恢复未备份的数据

如上图所示,从最后一个增量备份文件来看最后的一次事件的终止位置是6797

如上图所示,此时MySQL数据库未备份的数据,可以通过如上方式去进行数据恢复。

将增量备份文件中最后一次事件的终止位置,作为二进制日志文件进行未备份数据的恢复。

四.xtrabackup_完全增量备份

xtrabackup是一个叫做percona开源组织来维护的。

自动帮我记录二进制日志文件的使用信息,方便后续做增量备份和差异备份。

1.安装xtrabackup工具。

如上图所示,这是安装xtrabackup工具,此时这个软件需要的依赖会在我事先配置好的yum源里面去找。

如果从官网下载这个软件的最新版本很可能这个最新版本的软件只适用于centso8.0

如上图所示,软件已经安装好了,并且这个软件需要的依赖也已经自动安装完成。

如上图所示,这个软件给系统提供innobackupex,这个命令来实现物理备份。

2.完全备份

如上图所示,这是使用这个工具进行物理备份的方式。

如上图所示,这个工具默认是在/var/lib/mysql/mysql.sock去找这个套接字文件,但是此时这个MySQL数据库是以源码编译的方式安装的,这个套接字文件在/tmp/下,


如上图所示,此时使用这个物理备份工具进行备份的时候,也会在默认的备份目录下边生成一个相应的文件, 

如上图所示,此时可以在这个命令上边指定套接字文件的路径。

这个备份工具会自动帮助我们做很多事情,比如在备份之前自动锁表,在备份完成之后自动解锁表。

如上图所示,使用这个备份工具完成备份之后,会帮我们解锁表,并且会帮助我们记录目前数据库正在使用的日志,还有最后一个事件的位置。

如上图所示,此时会在这个指定目录下边会生成一个以机器当前时间为名称的目录,这个目录下边是备份的数据。

如上图所示,这个文件中保存的就是当时备份所使用的二进制日志的相关信息。

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

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

相关文章

OpenCV 学习记录:首篇

最近在学习机器视觉,希望能通过记录博客的形式来鞭策自己坚持学完,同时也把重要的知识点记录下来供参考学习。 1. OpenCV 介绍与模块组成 什么是 OpenCV? OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软…

基于vue框架的的校园二手市场交易平台8k655(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:学生,大学,商品分类,商品信息,在线咨询 开题报告内容 基于Vue框架的校园二手市场交易平台开题报告 一、课题意义 (一)理论意义 本课题旨在研究基于Vue框架的校园二手市场交易平台的设计与实现。当前&#xff…

3D计算机视觉概述

3D计算机视觉 3D计算机视觉概述 像机标定 文章目录 3D计算机视觉前言一、人类视觉二、计算机视觉2.1 计算机视觉的研究目的2.2 计算机视觉的研究任务2.3 计算机视觉的研究方法2.4 视觉计算理论2.5 马尔框架中计算机视觉表达的四个层次2.5.1 图像(像素表达&#xff…

操作系统(13)虚拟存储器

前言 操作系统中的虚拟存储器是一项关键技术,它为用户提供了一个远大于实际物理内存容量的逻辑内存空间。 一、定义与原理 虚拟存储器是具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统。其逻辑容量由内存容量与外存容量之和决定&…

【实用技能】如何运用Visual Paradigm快速创建团队的项目模板

从 Visual Paradigm 17.2 ()版开始,您可以创建自己的项目模板并与团队共享。这样团队成员就可以轻松创建符合团队标准的新项目。本文将指导您完成为团队创建项目模板的过程。 Visual Paradigm v17.2试用版下载 先决条件 您的团队必须使用 …

不良人系列-复兴数据结构(栈和队列)

个人主页:爱编程的小新☆ 不良人经典语录:“相呴相济 玉汝于成 勿念 心安” 目录 一. 栈(stack) 1. 栈的概念 2. 栈的常见方法 3.栈的模拟实现 ​编辑 二. 队列 1. 队列的概念 2. 队列的使用 2.1 队列的常见方法 2.2 队列的模拟实现 2.3 队列…

【Linux网络】网络基础:IP协议

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 ❀ IP协议 IP协议基本概念协议头格式分片与组装网段划分子网掩码特殊的IP地址 IP地址的数量限制…

Linux正则化与三剑客速成(一)

目录 1.正则化 1.1正则表达式(RE) 1.2 正则表达式的注意事项 1.3正则表达式的分类 1.4 基本正则表达式 ^:表示匹配文本中以某个字符串开头的行。 $:表示匹配以某个字符串结尾的文件内的行 ^$:表示空行,但是在Linux中的实际的操作中一…

HarmonyOS 非线性容器LightWeightMap 常用的几个方法

LightWeightMap可用于存储具有关联关系的key-value键值对集合,存储元素中key值唯一,每个key对应一个value。 LightWeightMap依据泛型定义,采用轻量级结构,初始默认容量大小为8,每次扩容大小为原始容量的两倍。 集合中k…

Docker的容器

目录 1. 什么是容器?2. 容器的生命周期2.1 容器处理OOM事件2.2 容器异常退出2.3 容器暂停 3. 容器命令详解3.1 容器命令清单3.2 docker create命令3.3 docker run命令3.4 docker ps命令3.5 docker logs命令3.6 docker attach命令3.7 docker exec命令3.8 docker stat…

LearnOpenGL学习(高级OpenGL -> 高级GLSL,几何着色器)

完整代码见:zaizai77/Cherno-OpenGL: OpenGL 小白学习之路 高级GLSL 内建变量 顶点着色器 gl_PointSoze : float 输出变量,用于控制渲染 GL_POINTS 型图元时,点的大小。可用于粒子系统。将其设置为 gl_Position.z 时,可以使点…

Excel/VBA 正则表达式归纳汇总

1.with结构。以下语句用来提取A列中的“成品”两个字前面的部分的中文,不含成品两个字,结果存放在第2列。使用了On Error Resume Next,表示错误时继续下一条。 Sub 提取口味() Set regx CreateObject("vbscript.regexp") On Err…

CodeMirror 如何动态更新definemode

CodeMirror 如何动态更新definemode 问题描述:解决方法: 问题描述: 项目中有一部分用到了CodeMirror组件,其高亮显示的内容需要根据最新的json动态的更新,需要使用definemode自定义高亮内容。 想要的效果如下&#xf…

用户发送请求后服务端i/o工作过程

华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…

智能人体安全防护:3D 视觉技术原理、系统架构与代码实现剖析

随着工业化程度的提高,生产安全已成为企业关注的重点。尤其是在一些存在禁区的工业厂区和车间,人员误入或违规进入将带来严重的安全隐患。为了解决这一问题,迈尔微视推出了智能人体安全检测解决方案,为企业提供全方位的人员安全监…

暂停window11自动更新

window11 的自动更新功能,一方面在后台占用资源,容易导致电脑卡顿;另一方面,“更新并关机” 和 “更新并重启” 的设置令人极其反感。很多补丁兼容性很差,更新后极易引发电脑蓝屏、闪屏等意想不到的 bug。 1.winR打开运…

CTF-WEB: php-Session 文件利用 [第一届国城杯 n0ob_un4er 赛后学习笔记]

step 1 搭建容器 教程 A5rZ 题目 github.com Dockerfile 有点问题,手动修复一下 FROM php:7.2-apacheCOPY ./flag /root COPY ./readflag / COPY ./html/ /var/www/html/ COPY ./php.ini /usr/local/etc/php/php.ini COPY ./readflag /readsecretRUN chmod 755 /var/www…

在Win11系统上安装Android Studio

诸神缄默不语-个人CSDN博文目录 下载地址:https://developer.android.google.cn/studio?hlzh-cn 官方安装教程:https://developer.android.google.cn/studio/install?hlzh-cn 点击Next,默认会同时安装Android Studio和Android虚拟机&#…

网络基础概念

目录 一、计算机网络的发展背景1、网络的定义(1) 独立模式(2)网络互联 2、局域网 LAN3、广域网 WAN4、比较局域网和广域网5、扩展 —— 域域网和互联网 二、初识协议1、协议的概念2、协议的本质3、协议分层(1&#xff…

基于docker安装-高斯DB(opengauss)

获取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/opengauss:latest启动并配置容器 docker run --name OpenGauss --privilegedtrue --restartalways -u root -p 15432:5432 -e GS_PASSWORDEnmo123 -v /etc/localtime:/etc/localtime -v /data/OpenGaus…