新聞中心
MySQL是一款非常常用的數(shù)據(jù)庫管理系統(tǒng),但是在操作這個系統(tǒng)時,我們難免會犯一些錯誤,比如誤刪多條數(shù)據(jù)庫。這樣的錯誤的后果是非常嚴重的,因為這些數(shù)據(jù)庫中包含著非常重要的數(shù)據(jù),一旦刪除,就會導致數(shù)據(jù)的丟失。但是不要擔心,即使您誤刪了多條數(shù)據(jù)庫,也有一些方法可以幫助您快速地恢復這些數(shù)據(jù)庫。在本篇文章中,我將向您介紹一些這樣的方法。

專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)兩當免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
1.使用備份
如果您有備份,那么恢復誤刪的數(shù)據(jù)庫就非常容易了。通常來說,為了保證數(shù)據(jù)的安全,數(shù)據(jù)庫管理員會定期對數(shù)據(jù)庫進行備份,這樣一旦誤刪了數(shù)據(jù)庫,就可以從備份中進行恢復。如果您沒有備份,那么接下來的方法就很重要了。
2.查看回收站
MySQL中有一個回收站,可能您誤刪的數(shù)據(jù)庫就在那里。要查看MySQL中的回收站,您可以使用以下命令:
SHOW RECYCLE BIN;
這個命令會返回MySQL回收站中的所有內(nèi)容,您可以查看其中是否包含了您誤刪的數(shù)據(jù)庫。
3.使用UNDELETE命令
如果您沒有備份,也沒有在回收站中找到誤刪的數(shù)據(jù)庫,那么您可以嘗試使用UNDELETE命令。這個命令可以幫助您恢復誤刪的表。
UNDELETE FROM table_name WHERE condition;
在執(zhí)行這個命令之前,您需要知道被刪除的表的名字和相應的條件。這個命令會從MySQL的日志文件中,找到被刪除的表并進行恢復。
4.使用Undrop-for-InnoDB工具
如果您誤刪的表是InnoDB類型的,那么您可以嘗試使用Undrop-for-InnoDB工具來進行恢復。這個工具可以恢復由于刪除或者truncate操作而丟失掉的InnoDB表。
在使用這個工具之前,您需要從MySQL的data目錄中找到包含被刪除表的文件,然后使用該工具來進行恢復。這個工具使用起來比較復雜,需要一些專業(yè)的知識。
5.請教專業(yè)人員
如果以上方法都不能解決您的問題,那么您可以考慮請教一些專業(yè)的MySQL管理員或者數(shù)據(jù)恢復專家。這些人員通常有豐富的經(jīng)驗和工具來幫助您找回誤刪的數(shù)據(jù)。
在使用MySQL時,誤刪多條數(shù)據(jù)庫是一個非常嚴重的錯誤。但是即使您犯了這個錯誤,也不必驚慌失措,因為有很多方法可以幫助您快速地進行恢復。無論是使用備份、查找回收站、使用UNDELETE命令、使用Undrop-for-InnoDB工具,還是請教專業(yè)人員,都是可以嘗試的方法。但是,在進行任何操作之前,請務必備份好您的數(shù)據(jù),以免造成更大的損失。
相關(guān)問題拓展閱讀:
- linux中mysql如何備份與恢復(mysql備份和恢復數(shù)據(jù)庫命令)
- mysql數(shù)據(jù)庫被刪除了,怎么恢復嗎
linux中mysql如何備份與恢復(mysql備份和恢復數(shù)據(jù)庫命令)
把以前寫的一個發(fā)你看看
腳本要求:編寫shell腳本,每天凌晨1點備份td_oa庫,到mysql-back目錄,并將備份文件壓縮,壓縮名稱為備份的日期,只保留連續(xù)七天的備份物斗猜文件
#!/bin/bash
mysql-uroot-pe”flushtableswithreadlock;”鎖住表
/usr/local/mysql/bin/mysqlmp-uroot-p123456td_oa–flush-logs–single-transaction
mysql-uroot-pe”unlocktables;”解鎖
a=`/bin/date%Y-%m-%d`#在這里加上銷源時間,壓縮的時候罩型加上時間,會失敗。
echo$a
cd/gxl
/bin/tar-czf$a.tar/fjp/td_oa.sql
b=”$a.tar”
cp-p$b/root/fjp
forcin`find/root/fjp-ctime7`
do
/bin/rm-rf$c
done
mysql數(shù)據(jù)庫被刪除了,怎么恢復嗎
可以安裝個電腦管家在電腦上面
然后選卜腔擇工具箱,可以看到有一個文件數(shù)據(jù)恢型喚衫復工具
使用這個工具,可以檢測出電腦里面誤刪的文件鏈或,然后進行恢復
你這個問題就不好辦了,因為數(shù)據(jù)文件要隨時改變圓基如。所以你恢復是會有鋒衡很多同名的文件,一定要確定橘啟是最新的那個才有可能恢復。如果確認是最新的數(shù)據(jù)文件也無法導入到數(shù)據(jù)庫中的話,就沒有辦法恢復了?。?/p>
除非你數(shù)據(jù)很重要,由專業(yè)人員將你的文件修復!
mysql應該難恢復了,oracle才有垃圾回收站,可以從recyclebin中弄回來
mysql 沒有ctrl+z
每個 DBA 是不是粗皮都有過刪庫的經(jīng)歷?刪庫了沒有備份怎么辦?備份恢復后無法啟動服務什么情況?表定義損壞數(shù)據(jù)無法讀取怎么辦?逗凳液
我曾遇到某初創(chuàng)互聯(lián)網(wǎng)企業(yè),因維護人員不規(guī)范的備份恢復操作,導致系統(tǒng)表空間文件被初始化,上萬張表無法讀取,花了數(shù)小時才搶救回來。
當你發(fā)現(xiàn)數(shù)據(jù)無法讀取時,也許并非數(shù)據(jù)丟失了,可能是 DBMS 找不到描述數(shù)據(jù)的信息。
背景
先來了解下幾張關(guān)鍵的 InnoDB 數(shù)據(jù)字典表,它們保存了部分表定義信息,在我們恢復表結(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對應山物 `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對應 `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,對應 id 的 page 中存儲著字典表的數(shù)據(jù)。
這里我們需要借助 undrop-for-innodb 工具恢復數(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ù)恢復場景。
場景1:drop table
是否啟用了 innodb_file_per_table 其恢復方法有所差異,當發(fā)生誤刪表時,應盡快停止MySQL服務,不要啟動。若 innodb_file_per_table=ON,更好只讀方式重新掛載文件系統(tǒng),防止其他進程寫入數(shù)據(jù)覆蓋之前塊設備的數(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
首先恢復表結(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)建恢復目錄
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. 導入恢復的數(shù)據(jù)字典
cat dumps/default/*.sql | mysql recovered
6. 讀取恢復后的表結(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,就可以從對應 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. 最后導入恢復的數(shù)據(jù)
cat dumps/default/*.sql | mysql sakila
更多詳細情況點擊
網(wǎng)頁鏈接
網(wǎng)頁鏈接
關(guān)于mysql恢復誤刪的多條數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務器托管擁有成都T3+級標準機房資源,具備完善的安防設施、三線及BGP網(wǎng)絡接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務器托管業(yè)務安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認可。
本文標題:教你如何快速恢復誤刪的多條MySQL數(shù)據(jù)庫(mysql恢復誤刪的多條數(shù)據(jù)庫)
URL鏈接:http://www.dlmjj.cn/article/dhjdddp.html


咨詢
建站咨詢
