问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql delete删除了,怎么恢复

发布网友 发布时间:2022-04-23 11:49

我来回答

5个回答

热心网友 时间:2022-04-08 09:36

MySQL开启binlog后,写入操作都会记录到二进制日志里,可以使用mysqlbinlog查看/导出/恢复数据.
1.如果你有归档日志的话,你可以先将数据恢复到上一个备份点,然后使用recover恢复到做命令前的时间点上。呵呵,还是很麻烦的。
2.mysql中的表在正常情况下执行delete 指定删除的记录实际上只是在索引文件中做了删除标记,同时也将数据文件中对记录的头几个字节改写, 但这几个字节具体的与入内容不清楚.
通过研究数据文件, 会发现几种数据类型保存的格式.
varchar: 在该类型数据开始的位置有一个字节来指出后面多少个字节是该字段的内容, 但是有一个例外就是如果后面的内容与varchar字段指定的长度完全相等时,就没有开头的这个字节了.
text: 这个基本上与varchar类型一样, 但是在开始是由两个字节来指出后面的数据长度的. 而且是高位在前,低位在后.
datetime: 为8个字节,同样是低位在前,高位在后, 将其转化为long值后就是yyyymmddhhmmss的格式的数据.
由于要恢复的表中只有这几种数据类型,所以对其他的类型没有研究.
知道了数据储存的格式, 就可以分析数据文件来读取记录了.

需要注意一点就是如果你在删除数据库插入了新的数据, 那么就有可能将原来的数据覆盖掉. 所以应该在删除出错后立即恢复才能恢复出大部分数据

热心网友 时间:2022-04-08 10:54

  常见的情况:
  1、如完全丢失数据库文件,用一般数据恢复方式不能恢复2、表被删除,甚至被重写,表行被删除3、索引错误,或者IAM断裂4、数据库大面损坏,可以指定任意表或者字段提取数据5、系统表损坏甚至完全损坏,可以提取指定数据

  Oracle数据库恢复

 
 1、undo,systen表空间损坏的恢复2、误delete数据的恢复,误删除表空间drop,truncate表的恢复3、各种ora-错误的恢
复4、DMP文件不能导入数据库以及LOB数据恢复等情况5、oracle数据库中数据文件出现现坏块情况下的恢复6、oracle数据库无数据库文件但
有有日志的情况下的恢复7、能够在系统表和空间文件丢失,变成0字节下完整的恢复数据8、只要没有覆盖表空间件,都有信心恢复数据。无论你是什么系统
(Windows,UNIX)等,无论什么存储设备(硬盘,磁盘阵列)

  大
环乙木数据恢复是一家专门做手机数据恢复业务的公司,拥有先进的数据恢复认证设备,使用的几乎全部是自有技术,对于数据恢复,采用最先进的数据分析和处理
方法,对手机数据丢失的数据恢复成功率在95%以上。如果您已经多方咨询,别的手机数据恢复公司都告诉您,数据恢复无法实现。我们可以很自信地告诉您,这块工作是我们的强项。我们可以手机、硬盘、服务器、U盘、数据库数据恢复等所有手机数据,且我
们可以为大家提供大量的成功案例以供参考,让你对我们更具信心。

热心网友 时间:2022-04-08 12:29

每个 DBA 是不是都有过删库的经历?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表定义损坏数据无法读取怎么办? 

我曾遇到某初创互联网企业,因维护人员不规范的备份恢复操作,导致系统表空间文件被初始化,上万张表无法读取,花了数小时才抢救回来。

当你发现数据无法读取时,也许并非数据丢失了,可能是 DBMS 找不到描述数据的信息。


背景

先来了解下几张关键的 InnoDB 数据字典表,它们保存了部分表定义信息,在我们恢复表结构时需要用到。

SYS_TABLES 描述 InnoDB 表信息CREATE TABLE `SYS_TABLES` (`NAME` varchar(255) NOT NULL DEFAULT '',  表名`ID` bigint(20) unsigned NOT NULL DEFAULT '0',  表id`N_COLS` int(10) DEFAULT NULL,`TYPE` int(10) unsigned DEFAULT NULL,`MIX_ID` bigint(20) unsigned DEFAULT NULL,`MIX_LEN` int(10) unsigned DEFAULT NULL,`CLUSTER_NAME` varchar(255) DEFAULT NULL,`SPACE` int(10) unsigned DEFAULT NULL,   表空间idPRIMARY KEY (`NAME`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_INDEXES 描述 InnoDB 索引信息CREATE TABLE `SYS_INDEXES` (  `TABLE_ID` bigint(20) unsigned NOT NULL DEFAULT '0', 与sys_tables的id对应  `ID` bigint(20) unsigned NOT NULL DEFAULT '0',  索引id  `NAME` varchar(120) DEFAULT NULL,         索引名称  `N_FIELDS` int(10) unsigned DEFAULT NULL, 索引包含字段的个数  `TYPE` int(10) unsigned DEFAULT NULL,  `SPACE` int(10) unsigned DEFAULT NULL,  存储索引的表空间id  `PAGE_NO` int(10) unsigned DEFAULT NULL,  索引的root page id  PRIMARY KEY (`TABLE_ID`,`ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_COLUMNS 描述 InnoDB 表的字段信息CREATE TABLE `SYS_COLUMNS` (  `TABLE_ID` bigint(20) unsigned NOT NULL, 与sys_tables的id对应  `POS` int(10) unsigned NOT NULL,     字段相对位置  `NAME` varchar(255) DEFAULT NULL,    字段名称  `MTYPE` int(10) unsigned DEFAULT NULL,  字段编码  `PRTYPE` int(10) unsigned DEFAULT NULL, 字段校验类型  `LEN` int(10) unsigned DEFAULT NULL,  字段字节长度  `PREC` int(10) unsigned DEFAULT NULL, 字段精度  PRIMARY KEY (`TABLE_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_FIELDS 描述全部索引的字段列CREATE TABLE `SYS_FIELDS` (  `INDEX_ID` bigint(20) unsigned NOT NULL,  `POS` int(10) unsigned NOT NULL,  `COL_NAME` varchar(255) DEFAULT NULL,  PRIMARY KEY (`INDEX_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;./storage/innobase/include/dict0boot.h 文件定义了每个字典表的 index id,对应 id 的 page 中存储着字典表的数据。

这里我们需要借助 undrop-for-innodb 工具恢复数据,它能读取表空间信息得到 page,将数据从 page 中提取出来。

# wget https://github.com/chhabhaiya/undrop-for-innodb/archive/master.zip# yum install -y gcc flex bison# make# make sys_parser

# ./sys_parser 读取表结构信息

sys_parser [-h] [-u] [-p] [-d] databases/table

stream_parser 读取 InnoDB page 从 ibdata1 或 ibd 或分区表

# ./stream_parserYou must specify file with -f optionUsage: ./stream_parser -f <innodb_datafile> [-T N:M] [-s size] [-t size] [-V|-g]  Where:    -h         - Print this help    -V or -g   - Print debug information    -s size    - Amount of memory used for disk cache (allowed examples 1G 10M). Default 100M    -T         - retrieves only pages with index id = NM (N - high word, M - low word of id)    -t size    - Size of InnoDB tablespace to scan. Use it only if the parser can't determine it by himself.

c_parser 从 innodb page 中读取记录保存到文件

# ./c_parserError: Usage: ./c_parser -4|-5|-6 [-dDV] -f <InnoDB page or dir> -t table.sql [-T N:M] [-b <external pages directory>]  Where    -f <InnoDB page(s)> -- InnoDB page or directory with pages(all pages should have same index_id)    -t <table.sql> -- CREATE statement of a table    -o <file> -- Save mp in this file. Otherwise print to stdout    -l <file> -- Save SQL statements in this file. Otherwise print to stderr    -h  -- Print this help    -d  -- Process only those pages which potentially could have deleted records (default = NO)    -D  -- Recover deleted rows only (default = NO)    -U  -- Recover UNdeleted rows only (default = YES)    -V  -- Verbose mode (lots of debug information)    -4  -- innodb_datafile is in REDUNDANT format    -5  -- innodb_datafile is in COMPACT format    -6  -- innodb_datafile is in MySQL 5.6 format    -T  -- retrieves only pages with index id = NM (N - high word, M - low word of id)    -b <dir> -- Directory where external pages can be found. Usually it is pages-XXX/FIL_PAGE_TYPE_BLOB/    -i <file> -- Read external pages at their offsets from <file>.    -p prefix -- Use prefix for a directory name in LOAD DATA INFILE command



接下来,我们演示场景的几种数据恢复场景。

场景1:drop table

是否启用了 innodb_file_per_table 其恢复方法有所差异,当发生误删表时,应尽快停止MySQL服务,不要启动。若 innodb_file_per_table=ON,最好只读方式重新挂载文件系统,防止其他进程写入数据覆盖之前块设备的数据。

如果评估记录是否被覆盖,可以表中某些记录的作为关键字看是否能从 ibdata1 中筛选出。

# grep WOODYHOFFMAN ibdata1

Binary file ibdata1 matches

也可以使用 bvi(适用于较小文件)或 hexmp -C(适用于较大文件)工具

以表 sakila.actor 为例CREATE TABLE `actor` (`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,`first_name` varchar(45) NOT NULL,`last_name` varchar(45) NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`actor_id`),KEY `idx_actor_last_name` (`last_name`)) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8

首先恢复表结构信息1. 解析系统表空间获取 page 信息

./stream_parser -f /var/lib/mysql/ibdata1

2. 新建一个 schema,把系统字典表的 DDL 导入

cat dictionary/SYS_* | mysql recovered

3. 创建恢复目录

mkdir -p mps/default

4. 解析系统表空间包含的字典表信息,

./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql > mps/default/SYS_TABLES 2> mps/default/SYS_TABLES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000002.page -t dictionary/SYS_COLUMNS.sql > mps/default/SYS_COLUMNS 2> mps/default/SYS_COLUMNS.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page -t dictionary/SYS_INDEXES.sql > mps/default/SYS_INDEXES 2> mps/default/SYS_INDEXES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000004.page -t dictionary/SYS_FIELDS.sql > mps/default/SYS_FIELDS 2> mps/default/SYS_FIELDS.sql

5. 导入恢复的数据字典

cat mps/default/*.sql | mysql recovered

6. 读取恢复后的表结构信息

./sys_parser -pmsandbox -d recovered sakila/actor

由于 5.x 版本 innodb 引擎并非完整记录表结构信息,会丢失 AUTO_INCREMENT 属性、二级索引和外键约束, DECIMAL 精度等信息。

若是 mysql 5.5 版本 frm 文件被从系统删除,在原目录下 touch 与原表名相同的 frm 文件,还能读取表结构信息和数据。若只有 frm 文件,想要获得表结构信息,可使用 mysqlfrm --diagnostic /path/to/xxx.frm,连接 mysql 会显示字符集信息。


热心网友 时间:2022-04-08 14:20

很遗憾,,,没法

热心网友 时间:2022-04-08 16:28

这个没办法恢复了
记一次mysql(用delete删除)数据恢复

首先,确认MySQL数据库版本为8.0,并且已开启binlog日志功能。在Linux环境下,日志文件通常位于/var/lib/mysql/目录中,文件名称以“binlog.”开头,通过找到序号最大的文件,即可定位到最近的删除操作日志。接下来,明确数据删除的时间范围,精确性越强,恢复操作的准确性越高。提取日志数据时,时间范围...

MySQL使用delete把表中的数据删除了,请问怎么恢复

MySQL开启binlog后,写入操作都会记录到二进制日志里,可以使用mysqlbinlog查看/导出/恢复数据. 假设你之前进行了 mysqldump全量备份,和binlog增量备份(在mysqldump全量备份时使用参数--flush-logs清除全量备份前的binlog). 先恢复之前用mysqldump进行的全量备份,然后用 mysqlbinlog进行时间点还原: ?12 mysql -uroot -p...

mysql delete删除了,怎么恢复

1.如果你有归档日志的话,你可以先将数据恢复到上一个备份点,然后使用recover恢复到做命令前的时间点上。呵呵,还是很麻烦的。2.mysql中的表在正常情况下执行delete 指定删除的记录实际上只是在索引文件中做了删除标记,同时也将数据文件中对记录的头几个字节改写, 但这几个字节具体的与入内容不清楚....

解决MySQL误删数据的方法分享mysql不小心删除

如果您已经误删了某些数据,并且没有及时备份,那么您可以尝试使用一些数据恢复工具来恢复丢失的数据。 MySQL自带的工具是mysqldump,可以用来备份和还原MySQL数据库,但是它不支持部分数据恢复。如果您需要恢复部分数据,可以使用第三方工具,如Recuva、EaseUS Data Recovery等。4. 使用MySQL日志功能进行数据恢复...

数据误删怎么恢复MySQL数据mysql不小心把用户

一、使用备份文件还原数据 如果在数据删除前备份了MySQL数据库,就可以通过备份文件还原数据。可以使用命令行或图形界面工具,找到备份文件并还原。以命令行方式为例,执行以下命令:mysql -u root -p Enter password:mysql&gt; CREATE DATABASE database_name;mysql&gt; USE database_name;mysql&gt; SOURCE /path...

当一个表中所有行都被delete语句删除后

3. 删除后的影响:删除所有数据后,表的任何与数据相关的属性,如自增的ID,通常会被重置。但是,这取决于具体的数据库系统。例如,在MySQL中,自增的ID通常不会自动重置,但在某些其他数据库中可能会。此外,如果表上有触发器、外键约束等,DELETE操作可能会受到这些约束的影响。4. 恢复数据:一旦...

如何恢复误删的MySQL表格mysql不小心删了表格

如果您没有备份MySQL数据,您可以使用MySQL Binlog恢复误删的表格。请注意,您必须在删除表格后立即执行此操作。执行以下操作:mysqlbinlog binlog.000001 &gt; /tmp/binlog.sql 将“binlog.000001”替换为您的MySQL二进制日志文件的名称。然后,打开/tmp/binlog.sql文件,找到删除表格的部分。将删除表格的...

怎样找回MYSQL数据库中删除的数据

1 innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit操作的话,可以执行rollback进行回滚恢复。如果是ddl操作,如drop、create、alter之类的操作时无效的 2 在进行删除操作之前有备份,比如mysqldump,物理备份数据文件之类的操作,那么可以恢复到删除前的数据 3 如果...

如何恢复数据库表删除数据 mysql

1 innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit操作的话,可以执行rollback进行回滚恢复。如果是ddl操作,如drop、create、alter之类的操作时无效的 2 在进行删除操作之前有备份,比如mysqldump,物理备份数据文件之类的操作,那么可以恢复到删除前的数据 3 如果...

如何恢复宝塔面板mysql数据库中误删除的数据表

1 innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit操作的话,可以执行rollback进行回滚恢复。如果是ddl操作,如drop、create、alter之类的操作时无效的 2 在进行删除操作之前有备份,比如mysqldump,物理备份数据文件之类的操作,那么可以恢复到删除前的数据 3 如果...

delete删除后怎么恢复 delete删除的数据怎么恢复 ctrl delete删除恢复 del删除的文件怎么恢复 delete误删恢复 mysql replace mysql rownum mysql binlog查看 mysql模糊查询
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机扣费限额在哪里修改? 黑茶和绿茶的功效区别,黑茶、绿茶功效简述 黑茶和绿茶哪个好 黑茶和绿茶的功效区别,二者功效各有侧重点! 订了陕西联通手机名片业务,一天内我三次或多次拨同一电话,系统是否会连 ... 陕西联通手机名片平台还有哪些业务附加费用? 什么是企业协同战略 吸烟指数中国吸烟市场及状况 我也想开家快递公司额,想向你取点经,需不需要自己的货车啊,还是用物流... 苹果手机怎么做到一边通话一边录音 想在网上买一个台电的U盘(酷闪钛金512M)不知怎样分真假? 科士威浪漫身体护肤乳可以擦脸吗 梦到暗恋的人,怎么办啊? 台电64G U盘真伪查询 梦见给暗恋的男生打电话但是不是他接的 梦见给恋人打电话叫她出来她说家里人不要她出来? lazada怎么发货? 梦见和喜欢的人打电话 ? 台电U盘真伪查询? 如何识别购买的台电 u盘是原装还是组装的 求教··怎样检测台电U盘真伪 忆回?过么对去 梦见和喜欢的人打电话发不出声音是怎么回事(最后好不容易说出一句话) 有哪些清爽不油腻的身体乳值得分享? 请问有谁知道怎样辨别台电科技的U盘真伪 有没有性价比高,好闻的身体乳?请问? 我不介意你慢动作是什么歌? 叫许美娇子好看吗? mysql ibdata1删除后怎么恢复表结构 有人可以解释一下吗? 题画诗册页 清.普荷 无事不许美, 得梅归去来, 雪深春尚浅, 一半到家开。 市场上常见的苏打水分为哪两类? 苏打水品牌有哪些值得推荐? 苏打水是什么水?最好的苏打水是那个牌子?? 苏打水什么时候喝合适?苏打水真的养胃么? lazada的发货一定要用箱子吗?可以使用快递袋子吗? 台电U盘有了产品查询号如何查真伪 科士威浪漫身体乳是不是很香怎么样 rsarias身体乳与rseries身体乳什么区别? MySQL怎么修改已建立表的结构 今天买了个台电幻彩系列16G U盘,怎么辩真假。看了下,实际内存15G多点,请问是真是假? mysql 利用data目录数据库怎么恢复 台电幻彩16G U盘 如何确认正版 shopee订单怎么发货? Lazada如何入驻,商家入驻后怎么铺货的? mysql如何修改表结构 U盘怎么辨真伪,以及是否为扩容的旧的和怎么辨认它的好坏 哪个品牌的苏打水好? 科士威身体乳是不是有两个产地 什么身体乳好用又好闻 用科士威浪漫身体乳需要先洗澡吗