MySQL 数据库恢复:如何执行时间点恢复(PITR)以挽救受损数据?
wptr33 2025-06-28 17:11 6 浏览
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、数据取证、数据迁移、网络安全、数据清除等解决方案,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。
天津鸿萌科贸发展有限公司是众多国际主流数据取证、数据恢复、数据备份及同步软件的授权代理商:Miray(HDClone/HDShredder)、Killdisk、Passware、PassMark、ElcomSoft、R-Studio、Systools、GetData、Stellar、ReclaiMe、UFS Explorer、VNR、SyncBack Pro、ViceVersa Pro 等。
时间点恢复(PITR)是一种基于备份的恢复类型,首先将完整备份进行还原,然后再将数据更改还原到某一指定的时刻。基于二进制日志记录,它可以将数据库还原到问题发生之前较邻近的时间。
我们举例说明一下:
如果您的 MySQL 服务器在星期二下午 3 点突然遇到系统崩溃,导致数据库中的表损坏。您可以将数据库还原到崩溃发生之前最邻近的那一时间点。如果启用了二进制日志记录,则可以执行时间点恢复到崩溃发生之前的状态。
但是,要使用 PITR 还原数据库,您必须具有二进制日志文件。只有在完全备份后才会创建这些文件。完全备份后对数据库所做的所有更改都记录在这些二进制日志文件中。这些文件通常出现在一系列备份的最后一个增量备份中。
在本文中,我们将学习如何执行时间点恢复以恢复 MySQL 数据库的不同方法。
MySQL 中时间点恢复的先决条件
对于 MySQL Server 中的时间点恢复,需考虑以下事项:
- 默认情况下,二进制日志文件存在于备份文件中。但是,如果使用 –use-tts 选项创建了备份,则不会生成二进制日志文件。
- 确保有一个可读的完整备份文件。二进制日志文件通常包含在增量备份文件中,可以将其用于时间点恢复。
- 确保已启用 Binary logging (二进制日志记录)。
- 确保拥有恢复备份的所有权限。可以执行 SHOW PRIVELEGES 语句来检查权限。
执行时间点恢复以还原数据库的方法
可以使用以下方法执行时间点恢复。
方法 1:使用二进制日志(Binlog)文件
二进制日志文件包含在最后一个备份文件中。它包含记录数据库更改的事件。它描述了对表数据的修改和创建表的操作。它包括用户进行更改所使用的 DELETE 语句。它还包含更新数据库中的数据所采用的语句的持续时间。
使用二进制日志文件执行时间点恢复的步骤:
首先,确保在 MySQL Server 上启用了二进制日志记录。要检查二进制日志记录的状态,可以执行以下命令:
mysql> SHOW VARIABLES LIKE 'log_bin';
如果 log_bin file 的值显示为 ON,则表示已启用二进制日志记录。现在,按照以下步骤从二进制日志中恢复数据:
- 查找当前二进制日志文件的名称和位置。默认情况下,二进制日志文件位于 data 目录中。但是,可以使用 –log-bin 选项将这些文件放在其他位置。可以运行以下语句来查看所有二进制日志文件的列表:
mysql> SHOW BINARY LOGS;
- 如果想了解服务器上二进制日志文件的状态,请运行以下命令:
mysql> SHOW BINARY LOG STATUS;
- 要在 MySQL Server 上查找当前二进制日志文件的名称,可以运行以下命令:
mysql> SHOW MASTER STATUS;
- 接下来,使用 mysqlbinlog 实用程序重放二进制日志事件。确保您拥有执行日志事件的所有权限,例如 BINLOG_ADMIN 权限或 SUPER、REPLICATIION_APPLIER。这是运行 mysqlbinlog 实用程序的命令:
mysqlbinlog [options] log_file
注意:执行上述命令时,可以查看文本格式的二进制日志文件中的事件。
- 可以检查二进制日志文件中的数据,并选择要应用的某个内容。运行以下命令:
gt; mysql -u root -p < tmpfile
或者,您可以使用以下命令直接从二进制日志文件应用事件:
gt; mysqlbinlog binlog_files | mysql -u root -p
- 接下来,使用以下命令通过 binlog 文件恢复 MySQL 数据库:
mysqlbinlog | mysql -u -p
- 要使用多个 binlog 文件恢复 MySQL 数据库,请运行以下命令:
mysqlbinlog mysql_bin.000001 mysql_bin.000002 | mysql -u root -ppassword database_name
方法 2:使用事件位置
您还可以使用二进制日志中的事件位置在 MySQL 中执行时间点恢复。在这种情况下,必须精确检查二进制日志以了解确切的位置和事件,然后使用它来应用二进制日志事件。可以使用 mysqlbinlog 程序检查事件位置。
使用事件位置执行时间点恢复的步骤:
- 首先恢复最后一个完整备份以及一系列相关备份。
- 接下来,使用 mysqlbinlog 查找与时间点对应的二进制日志事件位置。使用--start-position和--stop-position 选项:
mysqlbinlog --start-position="binary-log-position-at-the-end-of-backup-restores" \
--stop-position="binary-log-position-corresponding-to-tR" \
binary-log-filename | mysql -uadmin -p
- 接下来,从该位置开始,将二进制日志事件应用于服务器。
gt; mysqlbinlog --start-position=1006 --stop-position=1868 /var/lib/mysql/bin.123456 \
| mysql -u root -p
此命令将重复在指定时间点之前对数据库所做的所有更改。它将恢复从起始位置恢复到停止位置之间的所有事务。将损坏的数据库恢复到 MySQL 数据库崩溃之前的目标时间点。
时间点恢复的限制
MySQL 时间点恢复功能可以帮助用户将损坏的数据库恢复到过去的特定时刻。但是,它需要启用二进制日志记录功能并需要有最近的可读备份。如果二进制日志文件损坏,则时间点恢复可能会失败。
使用专业的 MySQL 数据库恢复工具,自行恢复受损数据库
如果备份文件或二进制日志文件已损坏或禁用了二进制日志记录,用户可以使用专门的 MySQL 恢复工具来恢复受损的 MySQL 数据库。专业的 MySQL 恢复工具可以快速从损坏的数据库中恢复数据。可以修复在 InnoDB 和 MyISAM 存储引擎中创建的受损数据库。这类工具可以完全精确地将所有数据从损坏的数据库恢复到新数据库。用户还可以将修复后的数据库文件保存为 MariaDB、SQL Script、CSV、XLS 和 HTML 等多种格式。
委托专业的 MySQL 数据库恢复专家,安全地恢复受损数据库
发生数据安全事件时,及时寻求数据恢复专家的建议是可靠的办法,可以快速地恢复重要数据,避免自行操作造成进一步的数据损失。
相关推荐
- SpringBoot 3 + Flutter3 实战低代码运营管理-10章
-
获课》aixuetang.xyz/5075/三天构建运营管理系统:SpringBoot3+Flutter3高效开发方法论...
- SpringBoot探针实现:从零构建应用健康监控利器
-
SpringBoot探针实现:从零构建应用健康监控利器声明本文中的所有案例代码、配置仅供参考,如需使用请严格做好相关测试及评估,对于因参照本文内容进行操作而导致的任何直接或间接损失,作者概不负责。本文...
- Spring Batch中的JobRepository:批处理的“记忆大师”是如何工作
-
一、JobRepository是谁?——批处理的“档案馆”JobRepository是SpringBatch的“记忆中枢”,负责记录所有Job和Step的执行状态。它像一位严谨的档案管理员,把任务执...
- 还在为 Spring Boot3 技术整合发愁?一文解锁大厂都在用的实用方案
-
你在使用SpringBoot3开发后端项目时,是不是常常陷入这样的困境?想提升项目性能和功能,却不知道该整合哪些技术;好不容易选定技术,又在配置和使用上频频踩坑。其实,这是很多互联网大厂后端开发...
- 一文吃透!Spring Boot 项目请求日志记录,这几招你绝对不能错过!
-
在互联网应用开发的高速赛道上,系统的稳定性、可维护性以及安全性是每一位开发者都必须关注的核心要素。而请求日志记录,就如同系统的“黑匣子”,能够为我们提供排查故障、分析用户行为、优化系统性能等关键信息...
- spring-boot-starter-actuator简单介绍
-
SpringBootActuator是SpringBoot的一个功能强大的子项目,它提供了一些有用的监控和管理SpringBoot应用程序的端点。SpringBootActuat...
- 使用SpringBoot钩子或Actuator实现优雅停机
-
服务如何响应停机信号在java中我们可以直接利用通过Runtime...
- 28-自定义Spring Boot Actuator指标
-
上篇我们学习了《27-自定义SpringBootActuator健康指示器》,本篇我们学习自定义SpringBootActuator指标(Metric)。...
- 如何在Spring Boot中整合Spring Boot Actuator进行服务应用监控?
-
监控是确保系统稳定性和性能的关键组成部分,而在SpringBoot中就提供了默认的应用监控方案SpringBootActuator,通过SpringBootActuator提供了开箱即用的应...
- 「Spring Boot」 Actuator Endpoint
-
Actuator官网地址:https://docs.spring.io/spring-boot/docs/2.5.6/reference/html/actuator.html目的监控并管理应用程序...
- Spring Boot Actuator监控功能全面剖析
-
SpringBootActuator监控功能全面剖析在现代企业级Java开发中,SpringBoot以其轻量化、高效率的特性深受开发者青睐。而作为SpringBoot生态系统的重要组成部分,S...
- 1000字彻底搞懂SpringBootActuator组件!
-
SpringBootActuator组件SpringBootActuator通过HTTPendpoints或者JMX来管理和监控SpringBoot应用,如服务的审计、健康检查、指标统计和...
- JavaScript数据类型(javascript数据类型介绍)
-
基本数据类型BooleanNullNumberStringSymbolUndefined对象数据类型ObjectArray定义:JavaScript数组是内置的对象之一,它可以用一个变量来存储多个同种...
- 能运行,不代表它是对的:5 个潜伏在正常功能下的 JavaScript 错误
-
JavaScript的动态性和复杂性意味着,代码虽然表面上正常运行,但一些深层次、隐蔽的陷阱往往让人意想不到,梳理了几个JavaScript开发中难以发现的隐蔽错误,旨在帮助我们写出更健壮、更可...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- SpringBoot 3 + Flutter3 实战低代码运营管理-10章
- SpringBoot探针实现:从零构建应用健康监控利器
- Spring Batch中的JobRepository:批处理的“记忆大师”是如何工作
- Github霸榜的SpringBoot全套学习教程,从入门到实战,内容超详细
- 还在为 Spring Boot3 技术整合发愁?一文解锁大厂都在用的实用方案
- 一文吃透!Spring Boot 项目请求日志记录,这几招你绝对不能错过!
- spring-boot-starter-actuator简单介绍
- 使用SpringBoot钩子或Actuator实现优雅停机
- 28-自定义Spring Boot Actuator指标
- 如何在Spring Boot中整合Spring Boot Actuator进行服务应用监控?
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)