新聞中心
在數(shù)字化時代,數(shù)據(jù)庫是企業(yè)的重要資產(chǎn),它存儲了企業(yè)的重要數(shù)據(jù),例如客戶信息、訂單記錄、工作文件等等。因此,當數(shù)據(jù)庫數(shù)據(jù)丟失或損壞時,企業(yè)將面臨嚴重的損失,從而影響業(yè)務(wù)。

做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù)團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)建站把每個網(wǎng)站當做一個產(chǎn)品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!
意外刪去數(shù)據(jù)庫是常見的數(shù)據(jù)丟失原因之一。這種情況發(fā)生在很多人身上,如果沒有備份,就意味著數(shù)據(jù)完全丟失。但是,許多人沒有意識到,即使數(shù)據(jù)庫被意外刪除了,它的數(shù)據(jù)仍然可以恢復(fù)。本文將討論有關(guān)數(shù)據(jù)恢復(fù)的問題,并提供一些簡單的方法,用于恢復(fù)被刪除的數(shù)據(jù)庫和數(shù)據(jù)。
如何恢復(fù)數(shù)據(jù)庫?
1. 恢復(fù)軟件:從存儲介質(zhì)上找回已刪除的文件。
如果只是誤刪了一個表或一個數(shù)據(jù)庫,而且零散,那么可以使用一些恢復(fù)軟件來找回文件。例如Recuva、EaseUS Data Recovery Wizard等。這些恢復(fù)軟件可以掃描存儲設(shè)備,找到被刪除的文件并恢復(fù)它們。這對于單個且零散的文件非常有用,但當文件數(shù)目非常多時,這些軟件工具難以應(yīng)對。僅獲得了零散的數(shù)據(jù),還需要進行進一步的處理。
2. 數(shù)據(jù)庫備份:恢復(fù)數(shù)據(jù)庫
備份是常見又重要的恢復(fù)方法。數(shù)據(jù)庫備份可以使您輕松地從完全丟失的數(shù)據(jù)中恢復(fù)數(shù)據(jù)。無論您是使用第三方軟件還是數(shù)據(jù)庫自帶的備份程序,備份都應(yīng)該是一個重要的前提。保持最新的備份可以保證您的數(shù)據(jù)在意外情況下有備份可恢復(fù)。
恢復(fù)備份的流程
使用備份進行恢復(fù)有以下兩種情況:
1. 只需恢復(fù)數(shù)據(jù),而不恢復(fù)整個數(shù)據(jù)庫
這種情況在小型數(shù)據(jù)庫管理系統(tǒng)中非常常見。通常情況下,您可以備份表或數(shù)據(jù)庫的所有備份。如果發(fā)生數(shù)據(jù)丟失,您可以使用備份將它們恢復(fù)回來。使用數(shù)據(jù)庫管理軟件中的還原的功能,您可以選擇要恢復(fù)的表并將它們恢復(fù)到最新狀態(tài)。
2. 恢復(fù)整個數(shù)據(jù)庫
在較大的數(shù)據(jù)庫環(huán)境中,恢復(fù)整個數(shù)據(jù)庫的過程可能會更加復(fù)雜。通常,您需要將初始備份復(fù)制到一個新的位置,并還原最新的備份。此外,恢復(fù)的順序也非常重要,因為如果順序不對,可能會引起進一步的損壞。
如何避免數(shù)據(jù)庫數(shù)據(jù)丟失?
除了備份之外,還有一些可以使用來保護您的數(shù)據(jù)庫不被刪除或損壞。以下是一些建議:
1. 定期備份數(shù)據(jù)庫
如前所述,備份是恢復(fù)被刪除的數(shù)據(jù)庫最容易且便捷的方法。定期備份可以保證數(shù)據(jù)得到最新與完整的恢復(fù)。
2. 避免意外刪除
意外刪除是導致數(shù)據(jù)丟失的常見原因之一。通過使用數(shù)據(jù)庫回收站或限制操作權(quán)限,可以避免意外刪除。例如,只將刪除權(quán)限授予操作管理員。
3. 檢查并修復(fù)數(shù)據(jù)庫
定期檢查和修復(fù)數(shù)據(jù)庫可以保證數(shù)據(jù)庫系統(tǒng)的穩(wěn)定運行,避免數(shù)據(jù)丟失或損壞。大多數(shù)數(shù)據(jù)庫軟件都具有自動檢查和修復(fù)功能,使用它們可以避免人為錯誤。
結(jié)論
當數(shù)據(jù)庫被意外刪除時,數(shù)據(jù)并沒有真正丟失。通過使用一些簡單的恢復(fù)方法,可以重新獲得數(shù)據(jù)。但是,為了保護數(shù)據(jù)庫和數(shù)據(jù),必須定期備份數(shù)據(jù)庫,并使用其他方法避免在不必要的情況下刪除或損壞數(shù)據(jù)。只有這樣,數(shù)據(jù)的安全才能得到保障。
相關(guān)問題拓展閱讀:
- 求助,不小心刪除數(shù)據(jù)庫了,有什么辦法恢復(fù)
- 把mysql數(shù)據(jù)庫刪了,請問可以恢復(fù)嗎
求助,不小心刪除數(shù)據(jù)庫了,有什么辦法恢復(fù)
有的,刪除后停止往刪除數(shù)據(jù)庫那分區(qū)寫任何數(shù)據(jù)。然后聯(lián)巧老辯孝缺系專業(yè)的數(shù)含爛據(jù)恢復(fù)公司。刪除后數(shù)據(jù)庫基本成碎片了,常規(guī)恢復(fù)軟件恢復(fù)不了。如需幫助請百度:成都和信數(shù)據(jù)恢復(fù)
把mysql數(shù)據(jù)庫刪了,請問可以恢復(fù)嗎
1.如果有備份,洞春兆恢復(fù)備份數(shù)據(jù)就可以。
2.如果在企業(yè)管理器里刪除了數(shù)據(jù)庫,如果有備份,恢納租復(fù)備份數(shù)據(jù)就可以。
3. 如果你是在程序里卸載sql程序,數(shù)據(jù)就在sql安裝目錄里,附加數(shù)據(jù)庫就可以了。
4.如果備份數(shù)據(jù)都沒有,可以找個硬盤數(shù)據(jù)恢復(fù)森鍵公司。
2.如者伏果在企業(yè)管理器里刪除了數(shù)據(jù)庫,如果有備份,恢復(fù)備份數(shù)據(jù)就可以。3.如果你是在程序里卸載sql程序,數(shù)據(jù)就在sql安首明攜裝槐賣目錄里,附加數(shù)據(jù)庫就可以了。
每個 DBA 是不是都有過刪庫的經(jīng)歷?刪庫了沒有備份怎散高么辦?備份恢復(fù)后無法啟動服務(wù)什么情況?表定義損壞數(shù)據(jù)無法讀取怎么辦?
我曾遇到某初創(chuàng)互聯(lián)網(wǎng)企業(yè),因維護人員不規(guī)范的備份恢復(fù)操作,導致系統(tǒng)表空間文件被初始化,上萬張表無法讀取,花了數(shù)小時才搶救回來。
當你發(fā)現(xiàn)數(shù)據(jù)無法讀取時,也許并非數(shù)據(jù)丟失了,可能是 DBMS 找不到描述數(shù)據(jù)的信息。
背景
先來了解下幾張關(guān)鍵的 InnoDB 數(shù)據(jù)字典表,衫基它們保存了部分表定義信息,在我們恢復(fù)表結(jié)構(gòu)時需要用到。
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對應(yīng) `ID` bigint(20) unsigned NOT NULL DEFAULT ‘0’, 索引id `NAME` varchar(120) DEFAULT NULL,索引名稱 `N_FIELDS` int(10) unsigned DEFAULT NULL, 索引包含字段的個數(shù) `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對應(yīng) `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, 字段字節(jié)長度 `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,對應(yīng) id 的 page 中存儲著字典表的數(shù)據(jù)。
這里我們需要借助 undrop-for-innodb 工具恢復(fù)數(shù)據(jù),它能讀取表空間信息得到 page,將數(shù)據(jù)從 page 中提取出來。
# wget yum install -y gcc flex bison# make# make sys_parser
# ./sys_parser 讀取表結(jié)構(gòu)信息
sys_parser databases/table
stream_parser 讀取 InnoDB page 從 ibdata1 或 ibd 或分區(qū)表
# ./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
接下來,我們演示場景的幾種數(shù)據(jù)恢復(fù)場景。
場景1:drop table
是否啟用了 innodb_file_per_table 其恢復(fù)方法有所差異,當發(fā)生誤刪表時,應(yīng)盡快停止MySQL服務(wù),不要啟動。若 innodb_file_per_table=ON,更好只讀方式重新掛載文件系統(tǒng),防止其他進程寫入數(shù)據(jù)覆蓋之前塊設(shè)備的數(shù)據(jù)。
如果評估記錄是否被覆蓋,可以表中某些記錄的作為關(guān)鍵字看是否能從 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
首先恢復(fù)表結(jié)構(gòu)信息1. 解析系統(tǒng)表空間獲取 page 信息
./stream_parser -f /var/lib/mysql/ibdata1
2. 新建一個 schema,把系統(tǒng)字典表的 DDL 導入
cat dictionary/SYS_* | mysql recovered
3. 創(chuàng)建恢復(fù)目錄
mkdir -p dumps/default
4. 解析系統(tǒng)表空間包含的字典表信息,
./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. 導入恢復(fù)的數(shù)據(jù)字典
cat dumps/default/*.sql | mysql recovered
6. 讀取恢復(fù)后的表結(jié)構(gòu)信息
./sys_parser -pmsandbox -d recovered sakila/actor
由于 5.x 版本 innodb 引擎并非完整記錄表結(jié)構(gòu)信息,會丟失 AUTO_INCREMENT 屬性、二級索引和外鍵約束, DECIMAL 精度等信息。
若是 mysql 5.5 版本 frm 文件被從系統(tǒng)刪除,在原目錄下 touch 與原表名相同的 frm 文件,還能讀取表結(jié)構(gòu)信息和數(shù)據(jù)。若只有 frm 文件,想要獲得表結(jié)構(gòu)信息,可使用 mysqlfrm –diagnostic /path/to/xxx.frm,連接 mysql 會顯示字符集信息。
innodb_file_per_table=OFF
因為是共享表空間模式,數(shù)據(jù)頁都存儲在 ibdata1,可以從 ibdata1 文件中提取數(shù)據(jù)。
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 即找到數(shù)據(jù),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,就可以從對應(yīng) page 中提取表數(shù)據(jù),并生成 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. 最后導入恢復(fù)的數(shù)據(jù)
cat dumps/default/*.sql | mysql sakila
更多詳細情況點擊
網(wǎng)頁鏈接
關(guān)于數(shù)據(jù)庫刪了能恢復(fù)嗎的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章標題:意外刪去數(shù)據(jù)庫,數(shù)據(jù)丟失?恢復(fù)方法大揭秘!(數(shù)據(jù)庫刪了能恢復(fù)嗎)
當前鏈接:http://www.dlmjj.cn/article/dhejejd.html


咨詢
建站咨詢
