您好,登錄后才能下訂單哦!
一、準備工作
1.下載并安裝wt實用工具包
wget http://source.wiredtiger.com/releases/wiredtiger-2.9.1.tar.bz2
tar xvf wiredtiger-2.9.1.tar.bz2 && cd wiredtiger-2.9.1
yum install snappy snappy-devel -y
./configure --enable-snappy
make
注意:最好下載和mongoDB中使用的wiredtiger版本對應的wt工具集。可以通過下面的方法獲得
當前mongoDB所使用的wiredtiger版本,在當前MongoDB數據目錄下執行:
2.準備好要恢復的數據
如我們要恢復metrics_db數據庫中的collection-101--2183197387550357866.wt 文件 的數據為例
在wireditger-2.9.1目錄下新建立一個目錄,用于存儲要恢復的數據,這里建立了20171024這個目錄,這里要注意一點:
要恢復的數據文件的存儲目錄一定要和原mongoDB的數據目錄的結構一樣,否則會出現 file not found錯誤
另外除了要恢復的數據文件外還需要其它的一些原數據文件,列表如下
WiredTiger
WiredTiger.lock
WiredTiger.turtle
WiredTiger.wt
WiredTigerLAS.wt
_mdb_catalog.wt
sizeStorer.wt
這些文件全部要存儲在和原MongoDB數據目錄結構一樣的目錄結構中。
二,恢復數據
1.檢查可以恢復多少數據
[root@sdw2 wiredtiger-2.9.1]# ./wt -v -h ./20171024/ -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R salvage metrics_db/collection-101--2183197387550357866.wt
大家要注意一下這里的參數,和命令的執行路徑的關系,執行完這個命令后會輸出如下結果
WT_SESSION.salvage 100
后臺的數字就是可以被恢復的數據
2.使用wt工具dump出可以恢復的數據
[root@sdw2 wiredtiger-2.9.1]# ./wt -v -h ./20171024/ -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R dump -f collection.dump metrics_db/collection-101--2183197387550357866
這里自用 -f 參數指定了dump數據的輸出文件.另外注意這一步中我們不用指定要恢復數據文件 的擴展名,也就是省去了.wt三個字符
3.備準一個用戶于恢復數據使用的mongoDB實例
mongod --dbpath /data/mongo_data --storageEngine wiredTiger
4.連接到這個新的實例,并建立一個用戶恢復數據庫
[root@sdw2] mongo 127.0.0.1:27017
> use recovery
> db.t.insert({id:1})
> db.t.remove({}) #建立一個表,插入一條數據后并刪除,我們主要是要在recovery目錄上生成一個wt文件
> db.t.status() #查看剛才操作所生成的wt文件
記錄下這個文件名和目錄,我們后續就是要利用wt命令從剛才dump的文件中重新生成這個文件,并把要恢復的數據恢復出來。現在我們要停止這個mongoDB實例,否則下面恢復數據時會報錯
5. load數據到wt文件中
[root@sdw2 wiredtiger-2.9.1]# ./wt -v -h /data/mongo_data/ -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R load -f collection.dump -r recovery/collection-0--4285167332299985373
table:recovery/collection-5-1786621982084020644: 11305
注意:
-h 參數指定的是我們剛才啟動mongoDB時所指定的數據目錄
-r 參數指定的就是我們剛才生成的用于recovery的WT文件
6.重啟mongoDB實例
mongod --dbpath /data/mongo_data --storageEngine wiredTiger
7.使用mongodump備份數據
由于我們替換了wt文件,所以這時原數據還有一些不一致,因此在mongo中還看不到我們恢復的數據,這時我們要利用mongodump和mongorestore命令來重新導出并導入一下數據,這樣才可以真正的恢復數據
mongodump -h 127.0.0.1:27017-d recovery
8使用mongorestore重新恢復數據
mongorestore -h227.0.0.1:27017--drop dump/
MySQL課程推薦
MySQL性能管理及架構設計
高性能可擴展MySQL數據庫設計及架構優化 電商項目
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。