【MySQL精通之路】InnoDB(18)-备份与恢复

目录

1.InnoDB备份

1.1 热备份

1.2 冷备份

1.3 使用mysqldump的逻辑备份

2.InnoDB恢复

2.1 实时恢复

2.2 从数据损坏或磁盘故障中恢复

2.3 InnoDB崩溃恢复

2.3.1 表空间发现

2.3.2 Redolog应用程序

2.3.3 未完成交易的回滚

2.3.4 更改缓冲区合并

2.3.5 清除

2.4 故障恢复期间的表空间发现


本节介绍与InnoDB备份和恢复相关的主题。

有关适用于InnoDB的备份技术的信息,请参阅“InnoDB备份”。

有关时间点恢复磁盘故障损坏的恢复以及InnoDB如何执行崩溃恢复的信息,请参阅“InnoDB恢复”

1.InnoDB备份

安全数据库管理的关键是定期备份

根据您的数据量、MySQL服务器数量和数据库工作负载,您可以单独或组合使用这些备份技术:热备份与MySQL Enterprise backup;

MySQL服务器关闭时通过复制文件进行冷备份;

使用mysqldump进行逻辑备份,用于较小的数据卷或记录数据库对象的结构信息

热备份和冷备份是复制实际数据文件的物理备份,mysql直接使用这些文件进行快速恢复。

推荐使用MySQL Enterprise Backup备份工具进行数据备份。

笔记
InnoDB不支持使用第三方备份工具恢复的数据库。

1.1 热备份

        mysqlbackup命令是MySQL Enterprise Backup组件的一部分,它允许您备份正在运行的MySQL实例,包括InnoDB表,在生成数据库的一致快照的同时,对操作的干扰最小。

当mysqlbackup复制InnoDB表时,对InnoDB表的读写可以继续。

MySQL Enterprise Backup还可以创建压缩备份文件,并备份数据库的子集

结合MySQL的Binlog,用户可以执行实时恢复。

MySQL Enterprise Backup是MySQL Enterprise订阅的一部分。

有关更多详细信息,请参阅“MySQL企业备份概述”。

MySQL Enterprise Backup为MySQL数据库执行热备份操作。该产品是为InnoDB存储引擎创建的表的高效可靠备份而设计的。为了完整起见,它还可以备份MyISAM和其他存储引擎中的表。
以下讨论简要总结了MySQL企业备份。有关更多信息,请参阅MySQL Enterprise Backup手册,可在https://dev.mysql.com/doc/mysql-enterprise-backup/en/.
热备份是在数据库运行和应用程序对其进行读写时执行的。这种类型的备份不会阻止正常的数据库操作,甚至可以捕获备份时发生的更改。出于这些原因,当您的数据库“增长”时,热备份是可取的——当数据足够大,备份需要大量时间,当数据对您的业务足够重要,您必须捕获最后的每一次更改,而不会使您的应用程序、网站或web服务离线。
MySQL Enterprise Backup对所有使用InnoDB存储引擎的表进行热备份。对于使用MyISAM或其他非InnoDB存储引擎的表,它会进行“热”备份,数据库会继续运行,但在备份时无法修改这些表。为了高效的备份操作,您可以将InnoDB指定为新表的默认存储引擎,或者将现有表转换为使用InnoDB存储引擎。

1.2 冷备份

如果你可以关闭MySQL服务器,你可以制作一个物理备份,该备份由InnoDB用来管理其表的所有文件组成。使用以下步骤:

1.慢关闭MySQL服务器,并确保其停止时没有错误。

2.将所有InnoDB数据文件(ibdata文件和.ibd文件)复制到一个安全的地方。

3.将所有InnoDB重做日志文件(MySQL 8.0.30及更高版本中的#ib_redoXX文件或早期版本中的ib_logfile文件)复制到安全的地方。

4.将您的my.cnf配置文件复制到安全的地方。

1.3 使用mysqldump的逻辑备份

除了物理备份之外,建议您通过使用mysqldump转储表来定期创建逻辑备份。

二进制文件可能在您没有注意到的情况下被损坏。转储的表存储在可读的文本文件中,因此察觉表损坏变得更容易。

此外,由于格式更简单,发生严重数据损坏的可能性更小

mysqldump还有一个--singletransaction选项,用于在不锁定其他客户端的情况下生成一致的快照。

请参阅“建立备份策略”。

复制与InnoDB表一起工作,因此您可以使用MySQL复制功能在需要高可用性的数据库站点上保留数据库的副本。

请参阅“InnoDB和MySQL主从复制”。

2.InnoDB恢复

2.1 实时恢复

        要将InnoDB数据库从物理备份的时候恢复到现在,您必须在启用二进制日志记录的情况下运行MySQL服务器,甚至在进行备份之前也是如此。

要在恢复备份后实现实时恢复,可以应用备份后二进制日志中的更改。

请参阅“实时(增量)恢复”。

2.2 从数据损坏或磁盘故障中恢复

        如果数据库损坏或发生磁盘故障,则必须使用备份执行恢复。

如果发生损坏,请首先查找未损坏的备份

恢复基本备份后,使用mysqlbinlog和mysql从二进制日志文件中进行实时恢复,以恢复备份后发生的更改。

        在某些数据库损坏的情况下,只需转储删除重新创建一个几个损坏的表就足够了。您可以使用CHECK TABLE语句来检查表是否已损坏,尽管CHECK TABLE自然无法检测到所有可能的损坏类型。

        在某些情况下,明显的数据库页面损坏实际上是由于操作系统损坏了自己的文件缓存,磁盘上的数据。最好先尝试重新启动计算机。这样做可以消除看起来是数据库页面损坏的错误。

如果MySQL仍然因为InnoDB一致性问题而无法启动,

请参阅“强制InnoDB恢复”

了解在恢复模式下启动实例的步骤,这允许您转储数据。

2.3 InnoDB崩溃恢复

要从MySQL服务器意外关闭中恢复,唯一的要求就是重新启动MySQL服务器。

InnoDB会自动检查日志,并将数据回滚到当前位置。InnoDB会自动回滚崩溃时存在的未提交事务。

InnoDB崩溃恢复包括五个步骤:

2.3.1 表空间发现

表空间发现是InnoDB用来识别需要redolog应用程序的表空间的程序。

请参阅下文故障恢复期间的表空间发现。

2.3.2 Redolog应用程序

Redolog应用程序在初始化期间执行,然后再接受任何连接。

如果在关闭或崩溃时将所有更改从缓冲池刷新到表空间ibdata*和*.ibd文件),则会跳过Redolog应用程序

如果启动时缺少重做日志文件,InnoDB也会跳过重做日志应用程序。

每次记录更改时,都会将当前最大自动增量计数器数值写入重做日志,这使其能够安全崩溃。

在恢复过程中,InnoDB扫描Redolog日志以收集计数器值的更改,并将这些更改应用于内存中的表对象。

有关InnoDB如何处理自动增量值的更多信息,请参阅

InnoDB中的AUTO_INCREMENT处理:

InnoDB auto_increment计数器初始化:

当遇到索引树损坏时,InnoDB会向Redolog中写入损坏标志,这使得损坏标志可以安全崩溃。

InnoDB还将内存中的损坏标志数据写入每个检查点上的存储引擎专用系统表。

在恢复过程中,InnoDB从两个位置读取损坏标志并合并结果,然后将内存表索引对象标记为损坏。

不建议删除Redolog以加快恢复速度,即使某些数据丢失是可以接受的。只有在干净关闭之后才应考虑删除Redolog,innodb_fast_shutdown设置为0或1。

2.3.3 未完成交易的回滚

        不完整事务是指在意外退出或快速关闭时处于活动状态的任何事务。回滚不完整事务所需的时间可能是事务中断前活动时间的三到四倍,具体取决于服务器负载。

不能取消正在回滚的事务。在极端情况下,当回滚事务预计需要非常长的时间时,innodb_force_recovery设置为3或更大时InnoDB可能会更快启动。

请参阅“强制InnoDB恢复”。

2.3.4 更改缓冲区合并

在将索引页读取到缓冲池时,将Change Buffer(系统表空间的一部分)中的更改应用于二级索引的叶页。

2.3.5 清除

将删除对于活动事务中不再可见拥有删除标记的记录。


        重做日志应用程序后面的步骤不依赖于redolog(除了记录写操作),并且与正常处理并行执行。其中,只有不完整事务的回滚对于崩溃恢复是特殊的。

insert缓冲区合并和清除是在正常处理过程中执行的。

在重做日志应用程序后,InnoDB尝试尽早接受连接,以减少停机时间。

作为崩溃恢复的一部分,InnoDB回滚服务器退出时未提交或处于XA PREPARE状态的事务。

回滚由后台线程执行,与来自新连接的事务并行执行

在回滚操作完成之前,新连接可能会遇到与已恢复事务的锁冲突。

在大多数情况下,即使MySQL服务器在大量活动中意外死亡,恢复过程也会自动进行,不需要DBA执行任何操作。

如果硬件故障或严重的系统错误损坏了InnoDB数据,MySQL可能会拒绝启动

在这种情况下,请参阅“强制InnoDB恢复”。

有关二进制日志和InnoDB崩溃恢复的信息,请参阅“二进制日志”。

2.4 故障恢复期间的表空间发现

如果在恢复过程中,InnoDB遇到自上一个检查点以来写入的重做日志,则必须将重做日志应用于受影响的表空间。在恢复过程中识别受影响的表空间的过程称为表空间发现。

表空间发现依赖于innodb_directories设置,该设置定义了启动时要扫描的目录以查找表空间文件。

innodb_directories默认设置为NULL,但当innodb构建启动时要扫描的目录列表时,innodb_data_home_dir、innodb_undo_directorydatadir定义的目录总是附加到innodb_directories参数值之后。

无论是否显式指定了innodb_directories设置,都会附加这些目录。

使用绝对路径定义的表空间文件或位于附加到innodb_directories设置的目录之外的表空间应添加到innodd_directories设置中。

如果以前未发现重做日志中引用的任何表空间文件,则恢复将终止。

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

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

相关文章

GPT-3可以用于哪些行业

GPT-3的应用已经渗透到了多个行业,其广泛的用途和强大的能力使得它成为了各行各业的重要工具。以下是一些GPT-3的主要应用领域: 在线客服:GPT-3可以理解和生成人类语言,使得它能够更好地满足用户的需求。它可以根据用户的提问实时…

数据湖对比(hudi,iceberg,paimon,Delta)

Delta 数据湖 Delta 更新原理 update/delete/merge 实现均基于spark的join功能。 定位 做基于spark做流批一体的数据处理 缺点 本质为批处理。强绑定spark引擎。整体性能相较其他数据湖比较差 hudi 数据湖 hudi 更新原理 通过hudi自定义的主键索引hoodiekey 布隆过…

Ali-Sentinel-集群流控

归档 GitHub: Ali-Sentinel-集群流控 测试 参考:热点流控-测试 新建 ClusterDemoApplication2 public class ClusterDemoApplication2 {public static void main(String[] args) {System.setProperty("csp.sentinel.dashboard.server", "127.0.…

华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)

关机! 之前一段时间手机变得特别卡顿,然后网上搜了一堆教程一点用没有,结果因为昨天下午在考试所以把手机关机了一个多小时,再打开之后手机就变得很流畅,原因不详,但效果显著,如有需要可尝试一…

docker使用PostgreSQL容器

要执行 db/migrations/ 目录下的多个 SQL 文件以迁移数据库,可以按照以下步骤进行: 1 确认 PostgreSQL 容器正在运行: 确认你已经启动了 PostgreSQL 容器并且它在运行: docker ps -a2 确认容器 beaconchain 是 Up 状态。 将 SQ…

docker 挂载运行镜像

文章目录 前言docker 挂载运行镜像1. 作用2. 命令3. 测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢…

软考 软件设计师 场景分析题 速成篇

文章目录 试题一:数据流图💖 基本图形元素1. 外部实体2. 数据存储3. 加工4. 数据流 📚 例题(1)实体名称(2)数据存储名称(3)数据流① 父子图平衡② 加工有输入有输出④ 数…

在Windows10中重命名文件和文件夹的6种方法,有你熟悉和不熟悉的

序言 你可以通过多种方式在Windows 10上重命名文件。如果每次你想更改文件名时仍右键单击并选择“重命名”,那么我们有一些技巧可以加快更改速度。 使用文件资源管理器重命名文件和文件夹 Windows 10的文件资源管理器是一个功能强大的工具。你知道吗,有四种不同的方法可以…

电商API接口接入电商平台抓取热门商品推荐上货api接入示例

电商API接口接入电商平台抓取热门商品推荐上货的示例代码如下: # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests # 请求…

CSS【常用CSS样式、盒子模型、定位、浮动 、扩展样式】--学习JavaEE的day46

day46 CSS 练习 页面实现&#xff1a; 分析&#xff1a; 未优化&#xff1a; 优化&#xff1a; 参考代码&#xff1a;&#xff08;包含样式优化–选择器CSS属性&#xff09; 先写上table方便实现&#xff0c;之后再去除即可 name没有服务器&#xff0c;可暂时不写 <!…

智能驾驶核心伪代码

智能驾驶是一个复杂且广泛的领域&#xff0c;涉及多个子系统和组件&#xff0c;包括但不限于感知、定位、决策规划、控制等。由于智能驾驶系统的复杂性&#xff0c;不可能简单地提供一个通用的代码片段。然而&#xff0c;我可以提供一个简单的示例&#xff0c;展示如何使用一些…

mysql - explain执行计划

explain执行计划 explain是mysql中一关键字&#xff0c;用于查看执行计划, 模拟执行器执行sql查询语句, 从而分析sql语句或表结构的性能瓶颈或优化方向。 explain用途 可分析得到以下信息&#xff1a; 表读取顺序数据读取操作的操作类型可使用的索引实际使用的索引表间引用…

微软开源多模态大模型Phi-3-vision,微调实战来了

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…

零部件销售|基于SSM+vue的轻型卡车零部件销售平台系统的设计与实现(源码+数据库+文档)

轻型卡车零部件销售平台 目录 基于SSM&#xff0b;vue的轻型卡车零部件销售平台系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2 管理员功能模块 3 用户后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题…

stream( ).collect ( Collectors.groupingBy ( ) ) 的用法

文章目录 第一种解释1、基本用法2、指定值收集器3、多级分组4、常见应用场景和用处 第二种解释1、基本语法2、示例3、更复杂的用法 第一种解释 Collectors.groupingBy 是 Java 8 引入的 Stream API 中的一个收集器&#xff08;Collector&#xff09;&#xff0c;它用于将流&am…

Golang:flosch/pongo2是一个类似Django模板语法的模板引擎

模板引擎可以用来做一些字符串渲染拼接工作&#xff0c;避免在代码中出现大量的字符串拼接 文档 https://www.schlachter.tech/solutions/pongo2-template-engine/https://github.com/flosch/pongo2 安装 go get -u github.com/flosch/pongo2/v6使用示例 1、字符串模板 p…

【笔记】Qt 按钮控件介绍(QPushButton,QCheckBox,QToolButton)

文章目录 QAbstractButton 抽象类(父类)QAbstractButton 类中的属性QAbstractButton 类中的函数QAbstractButton 类中的信号QAbstractButton 类中的槽 QPushButton 类(标准按钮)QPushButton 类中的属性QPushButton 类中的函数、槽 QCheckBox 类(复选按钮)QCheckBox 类的属性QCh…

Html中,想利用JS引入Jquery文件;$.getScript()无效

在使用$.getScript()时&#xff0c;会爆出错误&#xff1a;ReferenceError: $ is not defined &#xff0c;这是因为没有在JS文件前引入Jquery。 那么可以这样使用&#xff1a;(这个方式只适合放在页面代码最后面使用) (function () {var script window.document.createEleme…

Kettle简介

一、Kettle简介 Kettle是一个开源的ETL&#xff08;Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程&#xff09;项目。 项目名很有意思&#xff0c;水壶。按项目负责人Matt的说法&#xff1a;把各种数据放到一个壶里&#xff0c;然后呢&#xff0c;以…

PHP反射API与接口的动态分析

PHP的反射&#xff08;Reflection&#xff09;API 提供了一种在运行时获取类和对象信息的能力&#xff0c;包括类的方法、属性、接口等。这对于动态分析、构建IDE的自动完成功能、或者进行复杂的元编程非常有用。以下是如何使用PHP反射API进行动态分析的示例代码。 1. 反射类&…