在數(shù)據(jù)庫運維過程中,如果運維不規(guī)范,未建立容災環(huán)境并未制定合適的備份策略并備份,在某些極端情況下(比如主機異常斷電),可能導致數(shù)據(jù)庫實例無法啟動。此時,怎么盡最大的可能拯救數(shù)據(jù)?
在Oracle中,提供了一些隱含參數(shù)或者方法讓數(shù)據(jù)庫強制啟動,并在撈出數(shù)據(jù)后重建數(shù)據(jù)庫,或者利用DUL等工具盡可能的進行數(shù)據(jù)提取。那么在mongodb數(shù)據(jù)庫的運維過程中,遭遇數(shù)據(jù)庫文件損壞,實例無法啟動的時候怎么辦?我們都知道Mongodb從3.2版開始,默認使用的wiredTiger開源存儲引擎,通過在github上下載wt引擎的源碼,可以編譯生成一個wt工具,利用該工具可以從mongodb數(shù)據(jù)文件中撈出數(shù)據(jù)。
軟件下載地址:https://github.com/wiredtiger/wiredtiger,安裝方法:
安裝依賴包
yum-y install snappy.x86_64 snappy-devel.x86_64
編譯安裝
./configure--enable-snappy –prefix=/usr/local/wiredTiger
make&&makeinstall
數(shù)據(jù)恢復
在mongodb數(shù)據(jù)目錄的文件結構中,包括數(shù)據(jù)庫文件和WiredTiger.wt等元數(shù)據(jù)文件,若元數(shù)據(jù)文件丟失,則會導致wt工具也無法恢復數(shù)據(jù),出現(xiàn)類似如下報錯:
[1600001107:222670][28965:0x7f7a4a987740],file:WiredTiger.wt, connection: __posix_open_file, 715:/data/mongodb/WiredTiger.wt: handle-open: open: No such file ordirectory
如上圖所示,需保證紅框外的文件都在,才能從數(shù)據(jù)文件中抓取數(shù)據(jù)。
wt -v -h /data/mongodb -C"extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]"list –列出所有的對象名稱,由于WT引擎默認使用了snappy壓縮算法,所以需要使用extensions顯示指定類文件位置。
從數(shù)據(jù)文件中導出數(shù)據(jù):
/usr/local/wiredtiger/bin/wt -v -h /data/mongodb -C"extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]" dump -f /home/mongo/a.dmp test/collection/7-6614138329248103296
導出的文件在此時不是json文件,不能直接讀取,需導入一個臨時數(shù)據(jù)庫中
>show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
>use test
>db.createCollection("test");
{"ok" : 1 }
>show tables;
test
>db.test.stats().wiredTiger.uri;
statistics:table:test/collection/0--2648066414802528487 --獲取臨時集合的數(shù)據(jù)文件信息
[mongo@node1~]$ mongod -f /etc/mongodb/mongodb1.conf ---shutdown##停止臨時數(shù)據(jù)庫,否則在導入的時候會報資源忙
[1600004969:259849][25396:0x7f9657853740],wiredtiger_open: __posix_file_lock, 410:/data/mongodb1/WiredTiger.lock: handle-lock: fcntl: Resourcetemporarily unavailable
[1600004969:259905][25396:0x7f9657853740],wiredtiger_open: __conn_single, 1720: WiredTiger database is alreadybeing managed by another process: Device or resource busy
數(shù)據(jù)導入:
[mongo@node1~]$ /usr/local/wiredtiger/bin/wt -v -h /data/mongodb1 -C"extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]"-R load -f /home/mongo/a.dmp -rtest/collection/0--2648066414802528487
file:test/collection/0--2648066414802528487:100002 --提示導入了100002個document
啟動數(shù)據(jù)庫,但是我們發(fā)現(xiàn)此時導入的數(shù)據(jù)可以find,但是count為0,如下圖:
此時,我們采用導出和導入的方法更新元數(shù)據(jù)
再次查詢,集合文檔數(shù)據(jù)量count可正常顯示,見下圖:
注:wt工具導出和導入數(shù)據(jù)只能按集合逐一進行,mongodump和mongorestore修復元數(shù)據(jù),可以按庫多個集合同時修正。
本文檔使用的案例是在測試環(huán)境的測試案例。本文僅僅是提供一種在極端情況下盡可能救援數(shù)據(jù)的一種方法,但使用過程中也有諸多限制。本人認為,成熟的運維應該是制定完善的運維方案,建立合適的數(shù)據(jù)庫備份策略和數(shù)據(jù)庫容災架構,不到萬不得已,不使用此類非常規(guī)的手段恢復數(shù)據(jù)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/130142.html
摘要:現(xiàn)在已經成為的官方標準,如,以及的擴展協(xié)議。作者簡介李會軍,聯(lián)合創(chuàng)始人,關注團隊協(xié)作領域,致力于用工具解決中小團隊的協(xié)作問題。 Worktile自上線兩年多以來,以良好的用戶體驗和穩(wěn)定的服務,獲得了用戶的認可和喜愛。截止筆者寫這篇文章的時候,已經有超過10萬家團隊在使用Worktile。作為團隊協(xié)作工具,從技術上分析首先要解決如下幾個問題: 基于Web的跨平臺設計,讓用戶在任何地方都...
摘要:通過指定,并在生產線上關閉的接口來達到規(guī)避網絡進口的安全問題。避免同樣的悲劇在發(fā)生。上海小胖原創(chuàng)地址歡迎各位大神前來評論。每周五,敬請期待,上海小胖獨更。 序 原本這周想寫一個系列關于 GDPR(General Data Protection Regulation) MongoDB 的,但是昨天(2017.09.05)又爆出超2.6W 個MongoDB 節(jié)點被劫持。所以臨陣變卦,決定寫...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20