简易教程:快速恢复误删除的MySQL数据 (mysql恢复删除数据)

MySQL是一种开源的数据库管理系统,它被广泛地应用于许多网站和应用程序中。在使用MySQL的过程中,有时会出现误删除数据的情况,这会给用户带来极大的困扰。但幸运的是,MySQL提供了一些方法,可以帮助我们快速恢复误删除的数据。在本教程中,我们将学习如何使用这些方法来恢复MySQL中的误删除数据。

步骤1:停止MySQL服务

在开始恢复误删除数据之前,我们需要停止MySQL服务。为了停止MySQL服务,我们需要依次执行以下命令:

sudo systemctl stop mysql

如果你正在使用Windows系统,可以按下Windows键+R键打开运行窗口,输入services.msc并按下回车,找到MySQL服务并停止它。

步骤2:备份误删除的MySQL数据

在恢复误删除的数据之前,我们需要备份MySQL中的数据。这是一个非常重要的步骤,因为如果恢复失败,我们可以使用备份数据来恢复MySQL。备份MySQL数据有很多方法,其中最常用的方法是使用 mysqldump 命令。我们可以运行以下命令来备份MySQL中的数据:

mysqldump -u [用户名] -p [数据库名] > [备份文件路径]/[备份文件名].sql

在这个命令中,我们需要将[用户名]替换为MySQL的用户名,[数据库名]替换为要备份的数据库名称,[备份文件路径]替换为备份文件要存储的路径和[备份文件名]替换为备份文件的名称。

步骤3:恢复误删除的MySQL数据

现在我们来到了最关键的步骤–恢复误删除的MySQL数据。MySQL提供了两个方法来恢复这些数据:使用Binlog和使用第三方工具。

方法1:使用Binlog恢复误删除的MySQL数据

Binlog是MySQL的二进制日志文件,它记录了MySQL中所有的修改操作。我们可以使用Binlog来恢复误删除的数据。我们需要依次执行以下步骤:

步骤3.1:找到误删除数据的时间点

我们需要找到误删除数据的时间点,以便从Binlog中找到相关记录。我们可以通过登录到MySQL并查看删除日志来找到此时间点。我们可以按照以下步骤来查看删除日志:

mysql -u [用户名] -p[密码]

进入MySQL后,执行以下命令:

show binary logs;

这会显示所有可用的Binlog文件。找到包含误删除数据的Binlog文件,并记下它的文件名和位置。

步骤3.2:使用mysqlbinlog解析Binlog文件

现在我们需要解析Binlog文件以查找误删除的数据。我们可以使用mysqlbinlog工具,它是一个命令行工具,可以解析Binlog文件并输出其中的操作记录。

mysqlbinlog [binlog文件名] > [输出文件名].sql

在这个命令中,我们需要将[binlog文件名]替换为上一步中找到的Binlog文件名,[输出文件名]替换为要输出解析文件的文件名。此命令将解析Binlog文件并输出其内容到输出文件。

步骤3.3:恢复误删除的数据

现在我们需要在输出文件中查找误删除的数据。我们可以使用文本编辑器打开输出文件并搜索相关的数据。一旦找到相关的数据,我们可以将其复制到MySQL客户端并执行。

方法2:使用第三方工具恢复误删除的MySQL数据

除了使用Binlog外,我们还可以使用一些第三方工具来恢复误删除的数据。这些工具中更流行的是RecoverMySQL和MySQL-FR。

步骤4:重新启动MySQL服务

在成功恢复误删除的数据之后,我们需要重新启动MySQL服务。为了重新启动MySQL服务,我们需要依次执行以下命令:

sudo systemctl start mysql

如果你正在使用Windows系统,可以按下Windows键+R键打开运行窗口,输入services.msc并按下回车,找到MySQL服务并启动它。

结论

恢复误删除的MySQL数据可能是一个棘手的问题,在绝大多数情况下,我们都需要停止MySQL服务来恢复数据。然而,使用Binlog或第三方工具,我们可以快速高效地恢复误删除的MySQL数据。记得在操作MySQL数据之前进行数据备份,并定期备份数据,以防止出现数据丢失的情况。

相关问题拓展阅读:

“navicat for mysql”里删除的数据表及数据有办法恢复吗?

可以试试恢复的软件恢复,你可以用

AneData全能文件恢复。格式化分区或者误ghost到其卖顷他的分区数据丢失要恢复,分区突然打不开了提示未被格式化数据要恢复,直接删除或者清空了回收站,卸载软件丢失中尺陆的数据要恢复等等都可以恢复的,具有反删除困则、反格式化、分区恢复、高级模式等扫描功能,可以恢复最常见的种种数据丢失的情况。

“navicat for mysql”里删除的数据表及唤饥数据恢复办法:可以试试恢复的软件恢复,你可以用 AneData全能文件恢复。

注意:AneData全能文件恢复对格式化分区或者误ghost到其他的分区数据丢失要恢复,分区突然打不开了提示未被格式化数据要恢复,直接删除或者清空了回收站,卸载软件丢失的数据要恢复等等都可以恢复的。 AneData全能文件恢复具有反删除、反格式化、分区恢复、高级模式等扫描功能,可以恢复最常见的种种数据丢失的情况。

手机相册的照片误删这样恢复:

相机的照片误删了可以恢复,你可以用 AneData全能文件恢复,对轮模于我们日常生活中常见的文件丢失基本都可以恢复的。

AneData全能文件恢复支持RAW类型分区的恢复:硬盘分区突然打不开,提示未格式化,变成了RAW分区,本软件可以很快就列出完整的和桐返根目录结构来,目录文件的恢复效果非常好。全面支持微软新推出的exFAT分区恢复,包括删除文件、删除目录、格式化、重新分区等多种情况。

mysql 删除数据恢复的价格

mysql 删除数据恢复可以自己恢复孝空,不需要花钱恢复。

具体步骤:

1、之一步,查询语句:select* from table_name;或select * from table_name where

2、第二步,增加清慎汪语句或插入数据insert into table_name (clus…) values(values…)实例如图:

3、修答仔改数据:update tablename set xx=xx,=xx where = and =;

windows mysql几种备份和 恢复

设mysql 安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面存放备份数据库,备份数据库名槐档字为database_name_backup_.sql(.sql为备份咐梁日期)

  备份数据库:

  mysqldump -uroot -pdatabase_name>d:/database_name_backup_.sql

  恢复数据库:

  删除原有数据库,建立数据库,把备份数据库导入。

  mysqladmin -uroot -pdrop database_name

  衡明运mysqladmin -uroot -pcreate database_name

  mysql -uroot -pdatabase_name D:\db_backup\bbs_%Ymd%.sql

@echo on

rem *******************************Code End*****************************

将以上代码保存为backup_db.bat

然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天凌晨5点执行back_db.bat)

说明:此方法可以不用关闭数据库,并且可以按历衡每一天的时间来名称备份文件。

通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为,通过%date:~5,2%则可以得到02。(日期的字符串的下标是从0开始的)

3、利用WinRAR对MySQL数据库进行定时备份。

对于MySQL的备份,更好的方法就是直接备份MySQL数据库的Data目录。下面提供了一个利用WinRAR来对Data目录进行定时备份的方法。

首先当然要把WinRAR安装到计算机上。

将下面的命令写入到一个文本文件里

*******************************Code Start*****************************

net stop mysql

c:\progra~1\winrar\winrar a -ag -k -r -s d:\mysql.rar d:\mysql\data

net start mysql

*******************************Code End*****************************

保存,然后将文本文件的扩展名修改成CMD。进入控制面版,打开计划任务,双击“添加计划任务”。在计划任务向导中找到刚才的CMD文件,接着为这个任务指定一个运行时间和运行时使用的账号密码就可以了。

这种方法缺点是占用时间比较多,备份期间压缩需要时间,mysql断开比之一种方法更多的时间,但是对于文件命名很好。

前言

MySQL 5.6引入了GTID,每个事务都会产生一个GTID,我们可以通过验证主从GTID来验证主从数据的一致性。

为了叙述简便,定义一个量ALL_GTID: 表示某个数据库实例上 所有存在过的 或 将要存在的事务 的GTID(包括已经被purge掉的事务)。

在讨论数据库可用性的场景中, 当发生主备切换时, 需要进行数据补偿。通过比较主备的ALL_GTID,可以确定需要补偿多少数据:

在实例存活的情况,可以在实例状态中查询ALL_GTID。

在实例崩溃的情况,无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。

下面列举与ALL_GTID相关的变量。

与ALL_GTID相关的变量

Previous-GTIDs

Previous-GTIDs格式如下(环境为MySQL5.7,日志手动flush binary logs获得):

查看新轮转出的BINLOG:

下面为mysql-bin.00001中包含的GTID:

请点击输入图片描述

然后再次flush binary logs:

请点击输入图片描述

mysql-bin.00002中是没有任何GTID的。

请点击输入图片描述

综上Previous-GTIDs是本身这个BINLOG文件前面的所有BINLOG的。

请点击输入图片描述

全局变量中的GTID相关的变量

请点击输入图片描述

变量解释:

gtid_executed 代表着server上所有事务执行产生的GTID(包含已经被purge的BINLOG中的GTID或者是手动set gtid_purged的GTID)。

gtid_purged 代表着已经被purge到的GTID。gtid_purged是gtid_executed的子集。

gtid_retrieved 是从机上relay_log中的GTID。

ALL_GTID 的计算

了解了GTID相关的变量之后,可以得到获得实例的All_GTID的的方法:

对象

方法

存活的Master实例    gtid_executed    

存活的Slave实例    gtid_executed和gtid_retrieved的并集    

非存活Master实例    最后一个BINLOG文件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

非存活Slave实例    最后一个BINLOG文戚亏件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

在获得非存活实例中的ALL_GTID时,最后一个BINLOG文件中的GTID可能不连续(比如事务同时来自于本实例客户端和复制回放),所以需要扫描最后一个BINLOG文件。

生产中我们使用Xtrabackup来产生一个 从实例 的流程如下:

拉取备份,进行还原

change master to

set @@global.gtid_purged=”;

set @@global.gtid_purged=”; 的影响:

将 从实例 的ALL_GTID手工置为, 在通过GTID方式建立复制时不会出错.

将更新Binlog中记录的Previous-GTIDs (由于Binlog不可改变, 将产生新的Binlog, 记录新的Previous-GTIDs).

MySQL 5.7中set gtid_purged的行为变更

问题描述

回顾一下备份恢复的流历渣程:

拉取备份,进行还原

change master to

set @@global.gtid_purged=”;

现象: 发现有一台MySQL 5.7的Slave服务器恢复后没有产生 正确的Previous-GTIDs。

分析

分析整个过程,解决问题高烂神应该分阶段进行手动模拟发现问题。以下为详细步骤:

手工还原备份

环境

BINLOG数量,Previous-GTIDs状态

Xtrabackup 2.4.2 & MySQL 5.6    1,空    

Xtrabackup 2.4.2 & MySQL 5.7    1,空    

Xtrabackup 2.2.9 & MySQL 5.6    1,空    

Xtrabackup 2.2.9 & MySQL 5.7    1,空    

可见: 恢复过程不会轮转BINLOG。

验证change master和set gtid_purged在不同的MySQL版本中执行的差异

环境

BINLOG数量,Previous-GTIDs状态

change master & MySQL 5.6    1,空    

change master & MySQL 5.7    1,空    

set gtid_purged & MySQL 5.6    2,正常    

set gtid_purged & MySQL 5.7    1,空    

可见: 执行set gtid_purged时不同版本的MySQL产生了差异

验证

对不同版本MySQL单独执行set @@global.gtid_purged=”;语句。检查结果

环境

进行的操作

BINLOG数量,Previous-GTIDs状态

MySQL 5.7    reset master; set @@global.gtid_purged=”;    1,空    

MySQL 5.6    reset master; set @@global.gtid_purged=”;    2,正常    

结论

参考:

官方解释: 在5.7版本中,执行SET GTID_PURGED语句后binlog_simple_gtid_recovery会给GTID_PURGED计算出一个错误的值。

由于5.7中新增了存储GTID的表。所以5.7版本中set @@global.gtid_purged=”;语句被改成只修改存放GTID的表。

而5.6版本中会进行BINLOG轮转和向Previous_gtids_log_event中添加GTID。如果5.7需要产生和5.6相同结果的话,可以在SET GTID_PURGED语句后手动执行flush binary logs语句。

关于mysql恢复删除数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 简易教程:快速恢复误删除的MySQL数据 (mysql恢复删除数据)