在数字化时代,数据库是企业的重要资产,它存储了企业的重要数据,例如客户信息、订单记录、工作文件等等。因此,当数据库数据丢失或损坏时,企业将面临严重的损失,从而影响业务。
做网站、成都网站建设服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联建站把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
意外删去数据库是常见的数据丢失原因之一。这种情况发生在很多人身上,如果没有备份,就意味着数据完全丢失。但是,许多人没有意识到,即使数据库被意外删除了,它的数据仍然可以恢复。本文将讨论有关数据恢复的问题,并提供一些简单的方法,用于恢复被删除的数据库和数据。
如何恢复数据库?
1. 恢复软件:从存储介质上找回已删除的文件。
如果只是误删了一个表或一个数据库,而且零散,那么可以使用一些恢复软件来找回文件。例如Recuva、EaseUS Data Recovery Wizard等。这些恢复软件可以扫描存储设备,找到被删除的文件并恢复它们。这对于单个且零散的文件非常有用,但当文件数目非常多时,这些软件工具难以应对。仅获得了零散的数据,还需要进行进一步的处理。
2. 数据库备份:恢复数据库
备份是常见又重要的恢复方法。数据库备份可以使您轻松地从完全丢失的数据中恢复数据。无论您是使用第三方软件还是数据库自带的备份程序,备份都应该是一个重要的前提。保持最新的备份可以保证您的数据在意外情况下有备份可恢复。
恢复备份的流程
使用备份进行恢复有以下两种情况:
1. 只需恢复数据,而不恢复整个数据库
这种情况在小型数据库管理系统中非常常见。通常情况下,您可以备份表或数据库的所有备份。如果发生数据丢失,您可以使用备份将它们恢复回来。使用数据库管理软件中的还原的功能,您可以选择要恢复的表并将它们恢复到最新状态。
2. 恢复整个数据库
在较大的数据库环境中,恢复整个数据库的过程可能会更加复杂。通常,您需要将初始备份复制到一个新的位置,并还原最新的备份。此外,恢复的顺序也非常重要,因为如果顺序不对,可能会引起进一步的损坏。
如何避免数据库数据丢失?
除了备份之外,还有一些可以使用来保护您的数据库不被删除或损坏。以下是一些建议:
1. 定期备份数据库
如前所述,备份是恢复被删除的数据库最容易且便捷的方法。定期备份可以保证数据得到最新与完整的恢复。
2. 避免意外删除
意外删除是导致数据丢失的常见原因之一。通过使用数据库回收站或限制操作权限,可以避免意外删除。例如,只将删除权限授予操作管理员。
3. 检查并修复数据库
定期检查和修复数据库可以保证数据库系统的稳定运行,避免数据丢失或损坏。大多数数据库软件都具有自动检查和修复功能,使用它们可以避免人为错误。
结论
当数据库被意外删除时,数据并没有真正丢失。通过使用一些简单的恢复方法,可以重新获得数据。但是,为了保护数据库和数据,必须定期备份数据库,并使用其他方法避免在不必要的情况下删除或损坏数据。只有这样,数据的安全才能得到保障。
相关问题拓展阅读:
有的,删除后停止往删除数据库那分区写任何数据。然后联巧老辩孝缺系专业的数含烂据恢复公司。删除后数据库基本成碎片了,常规恢复软件恢复不了。如需帮助请百度:成都和信数据恢复
1.如果有备份,洞春兆恢复备份数据就可以。
2.如果在企业管理器里删除了数据库,如果有备份,恢纳租复备份数据就可以。
3. 如果你是在程序里卸载sql程序,数据就在sql安装目录里,附加数据库就可以了。
4.如果备份数据都没有,可以找个硬盘数据恢复森键公司。
2.如者伏果在企业管理器里删除了数据库,如果有备份,恢复备份数据就可以。3.如果你是在程序里卸载sql程序,数据就在sql安首明携装槐卖目录里,附加数据库就可以了。
每个 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 yum install -y gcc flex bison# make# make sys_parser
# ./sys_parser 读取表结构信息
sys_parser databases/table
stream_parser 读取 InnoDB page 从 ibdata1 或 ibd 或分区表
# ./stream_parserYou must specify file with -f optionUsage: ./stream_parser -f Where: -hPrint this help -V or -g – Print debug information -s size – Amount of memory used for disk cache (allowed examples 1G 10M). Default 100M -Tretrieves 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 -f -t table.sql Where -f — InnoDB page or directory with pages(all pages should have same index_id) -t — CREATE statement of a table -o — Save dump in this file. Otherwise print to stdout -l — 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)innodb_datafile is in REDUNDANT formatinnodb_datafile is in COMPACT formatinnodb_datafile is in MySQL 5.6 format -T — retrieves only pages with index id = NM (N – high word, M – low word of id) -b — Directory where external pages can be found. Usually it is pages-XXX/FIL_PAGE_TYPE_BLOB/ -i — Read external pages at their offsets from . -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(适用于较小文件)或 hexdump -C(适用于较大文件)工具
以表 sakila.actor 为例CREATE TABLE `actor` (`actor_id` allint(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 dumps/default
4. 解析系统表空间包含的字典表信息,
./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/01.page -t dictionary/SYS_TABLES.sql > dumps/default/SYS_TABLES 2> dumps/default/SYS_TABLES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/02.page -t dictionary/SYS_COLUMNS.sql > dumps/default/SYS_COLUMNS 2> dumps/default/SYS_COLUMNS.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/03.page -t dictionary/SYS_INDEXES.sql > dumps/default/SYS_INDEXES 2> dumps/default/SYS_INDEXES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/04.page -t dictionary/SYS_FIELDS.sql > dumps/default/SYS_FIELDS 2> dumps/default/SYS_FIELDS.sql
5. 导入恢复的数据字典
cat dumps/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 会显示字符集信息。
innodb_file_per_table=OFF
因为是共享表空间模式,数据页都存储在 ibdata1,可以从 ibdata1 文件中提取数据。
1. 获取表的 table id,sys_table 存有表的 table id,sys_table 表 index id 是1,所以从01.page 获取表 id./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/01.page -t dictionary/SYS_TABLES.sql | grep sakila/actorB28 2AD4D SYS_TABLES “sakila/actor” 0 “”B28 2AD4D SYS_TABLES “sakila/actor” 0 “” 0
2. 利用 table id 获取表的主键 id,sys_indexes 存有表索引信息,innodb 索引组织表,找到主键 id 即找到数据,sys_indexes 的 index id 是3,所以从03.page 获取主键 id
./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/03.page -t dictionary/SYS_INDEXES.sql | grepBABCA SYS_INDEXES”PRIMARY”BAC3C SYS_INDEXES”idx_actor_last_name”BABCA SYS_INDEXES”PRIMARY”BAC3C SYS_INDEXES”idx_actor_last_name”
3. 知道了主键 id,就可以从对应 page 中提取表数据,并生成 sql 文件。
./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/76.page -t sakila/actor.sql > dumps/default/actor 2> dumps/default/actor_load.sql
4. 最后导入恢复的数据
cat dumps/default/*.sql | mysql sakila
更多详细情况点击
网页链接
关于数据库删了能恢复吗的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网站名称:意外删去数据库,数据丢失?恢复方法大揭秘!(数据库删了能恢复吗)
本文链接:http://www.shufengxianlan.com/qtweb/news8/44908.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联