使用WT工具恢復MongoDB資料
眾所周知MongoDB的底層儲存是由
WiredTiger
負責的,其資料檔案也是
.wt
格式。既然如此,我們就有可能不通過
MongoDB服務,而是直接用
wt
工具從資料檔案中恢復資料。雖然我們通常推薦生產環境一定要配置複製集,但是很無奈,技術社群已經數次有人因為單機執行,最後硬碟損壞等原因導致無法啟動。
wt
工具作為最後一根稻草,可以在放棄治療前再嘗試挽救一下。
編譯
wt工 具可以執行於Linux和Windows上。因為各自的作業系統和MongoDB版本不同,可能產生較多的組合。在使用時應該根據自己情況編譯適合的版本。下面以CentOS 7為例演示編譯過程。
1.安裝作業系統依賴
sudo yum install -y epel-release libtool automake snappy snappy-devel lz4 lz4-devel zstd zstd-devel libzstd-devel zlib zlib-devel git make vim-common
2. 準備原始碼
git clone
根據所使用的MongoDB版本,應該選擇正確的
wt
分支。例如我當前使用的
MongoDB 4.4.1
,
那麼同樣應該選擇WiredTiger的相應tag
mongodb-4.4.1
> git tag | grep 4.4.1mongodb-4.4.1mongodb-4.4.1-rc0mongodb-4.4.1-rc1mongodb-4.4.1-rc2mongodb-4.4.1-rc3mongodb-4.4.10mongodb-4.4.10-rc0mongodb-4.4.11-rc0> git checkout tags/mongodb-4.4.1 -b v4.4.1
3. 編譯原始碼
sh autogen.sh./configure --disable-shared --with-builtins=lz4,snappy,zlib,zstdmake -j $(nproc)make install
簡單起見我們使用了
--disable-shared
來將動態連結庫直接打包到執行檔案中,這樣可以避免很多後續的麻煩,代價是生成的執行檔案較大。
編輯資料
如果有幸
dbpath
中的其他檔案沒有丟失,包括:
-
WiredTiger*
-
要恢復的集合的
collection-xxx.wt
-
與要恢復集合相關的index檔案
則可以直接使用 wt工具恢復資料了:
wt dump file:collection-10--2280053313118266952.wt
不過,如果所有東西都還在的話,為什麼還要用 wt來恢復呢?所以我相信大部分人到這裡都是跑不下去的。所以來看下一步,當你丟到只剩個褲衩子的時候該怎麼辦。
資料恢復
wt
讀取資料的基本前提條件是要有後設資料,也就是
WiredTiger*
那堆檔案。那我們就來嘗試構造這些檔案:
mkdir tempcd temptouch WiredTiger WiredTiger.lockwt list
為了簡單起見,後續步驟我們沒有使用 wt 來完成 ,而是使用 Mon goDB:
mongod --dbpath ./
啟動另一個視窗,使用mongo shell連線到當前例項:
mongo
任意建立一個集合,我們將把資料恢復到這個集合中:
db.dump.insert({x: 1});db.dump.stats().wiredTiger.uri# statistics:table:collection-7-666354062479792805
collection-7-666354062479792805.wt
即我們要使用的目標檔名。此時應:
-
停止mongod(直接ctrl-c)
-
使用我們要恢復的檔案覆蓋上述檔案
cp collection-10--2280053313118266952.wt collection-7-666354062479792805.wt
-
讓 wt 幫我們修復檔案:
wt salvage file:collection-7-666354062479792805.wt
-
重啟mongod程式:
mongod --dbpath ./
-
再次使用shell連線到MongoDB,在dump集合中即可找到我們要恢復的資料。
注意此時集合資料雖然恢復正常,但如果你 count()就會發現返回結果是1。不用擔心,這個問題很容易修復:
db.dump.validate({full: true});
下面該怎麼辦大家心裡有數了嗎?
關於作者: 張耀星
MongoDB大中華區首席諮詢顧問,供職於MongoDB售後服務團隊5年+,擁有近10年MongoDB使用經驗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69961190/viewspace-2847445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【資料庫資料恢復】mdb_catalog.wt檔案丟失的MongoDB資料恢復案例資料庫資料恢復MongoDB
- MongoDB案例分享:如何使用oplog恢復資料MongoDB
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 硬碟資料恢復工具硬碟資料恢復
- 資料恢復工具PhotoRec資料恢復
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】無法啟動MongoDB服務的資料恢復案例資料庫資料恢復MongoDB
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 資料庫資料恢復——Windows無法啟動MongoDB服務的資料恢復案例資料庫資料恢復WindowsMongoDB
- 【資料庫資料恢復】MongoDB資料庫服務啟動失敗的資料恢復案例資料庫資料恢復MongoDB
- Disk Drill資料恢復工具資料恢復
- 使用hellodba的工具恢復truncate表的資料
- 資料恢復-電腦管家檔案恢復工具資料恢復
- Mongodb資料庫誤刪後的恢復MongoDB資料庫
- 使用恢復建議恢復資料庫資料庫
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 資料庫資料恢復—MongoDB資料庫檔案丟失,啟動報錯的資料恢復案例資料庫資料恢復MongoDB
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- Oracle中truncate table後的資料恢復(Oracle資料恢復工具-ODU)Oracle資料恢復
- oradim工具恢復資料庫資料庫
- 恢復資料,資料塊恢復
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- 資料恢復工具Recoverit使用教程:如何修復損壞的影片資料恢復
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- 資料恢復:AMDU資料抽取恢復資料恢復
- 使用資料恢復顧問資料恢復
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- MongoDB高階應用之資料轉存與恢復MongoDB
- 磁碟資料恢復及備份工具資料恢復
- 15 款 Windows 的資料恢復工具Windows資料恢復
- 磁碟誤刪卷資料恢復工具資料恢復
- MongoDB資料庫報錯,資料庫檔案丟失資料恢復案例MongoDB資料庫資料恢復
- Sql server 資料恢復工具----LogExplore 使用方法SQLServer資料恢復
- 【備份恢復】不使用rman工具就能恢復被rm刪除的資料檔案案例
- MongoDB高階應用之資料轉存與恢復(5)MongoDB
- 使用myloader恢復資料教程
- 使用innobackupex恢復mysql資料庫MySql資料庫
- 使用 MYSQLBINLOG 來恢復資料MySql