MongoDB 3.4.19 WiredTiger(wt)工具編譯指南
MongoDB 3.4.19 內(nèi)置的 WiredTiger 存儲(chǔ)引擎版本是 2.9.2,wt 工具是 WiredTiger 官方提供的命令行管理工具,用于修復(fù)、檢查、dump/load WiredTiger 數(shù)據(jù)文件。
一、核心前提
- 必須編譯 WiredTiger 2.9.2 版本(和 MongoDB 3.4.19 引擎版本嚴(yán)格一致,版本不匹配會(huì)直接損壞數(shù)據(jù))
- 編譯環(huán)境:CentOS 7 / Ubuntu 16.04(最穩(wěn)定,匹配 MongoDB 3.4 編譯環(huán)境)
- 依賴:gcc、g++、make、automake、libtool、snappy-devel(壓縮庫)
二、環(huán)境準(zhǔn)備(一鍵安裝)
1. CentOS 7 環(huán)境
# 安裝基礎(chǔ)編譯依賴
yum install -y gcc gcc-c++ make automake libtool snappy snappy-devel git lz4-devel
三、下載 WiredTiger 2.9.2 源碼
# 克隆官方倉庫
https://github.com/wiredtiger/wiredtiger/tree/mongodb-3.4.19
git clone https://github.com/wiredtiger/wiredtiger.git
cd wiredtiger
# 切換到 MongoDB 3.4.19 對應(yīng)的精準(zhǔn)版本(wt 2.9.2版本)
git checkout mongodb-3.4.19

image.png
四、編譯配置(關(guān)鍵:匹配 MongoDB 編譯參數(shù))
你只需要進(jìn)入源碼目錄后,任選一套執(zhí)行即可。
方式 1:內(nèi)置模式(Builtins 推薦,MongoDB 官方風(fēng)格)
特點(diǎn):snappy/lz4/zlib 直接編進(jìn) wt 二進(jìn)制,不生成插件,不依賴系統(tǒng)動(dòng)態(tài)庫。
sh autogen.sh
./configure \
--prefix=/usr/local/wt-2.9.2 \
--disable-shared \
--enable-static \
--with-builtins=lz4,snappy,zlib
make -j$(nproc)
make install
方式 2:傳統(tǒng)插件模式 (Loadable Extensions / Extension Modules)
特點(diǎn):snappy/lz4/zlib 編譯成 .so 插件,運(yùn)行時(shí)需要?jiǎng)討B(tài)加載。
sh autogen.sh
./configure \
--prefix=/usr/local/wt-2.9.2 \
--enable-static \
--enable-shared \
--enable-snappy \
--enable-lz4 \
--enable-zlib
make -j$(nproc)
make install
最簡單的區(qū)別(一眼看懂)
-
內(nèi)置模式(with-builtins)
- 最終只有一個(gè)
wt - 拷貝到任何 CentOS7 都能直接用
- 最穩(wěn)定,最符合 MongoDB 3.4 用法
- 最終只有一個(gè)
-
插件模式(--enable-snappy)
- 會(huì)生成:libwiredtiger_snappy.so 等插件
- 運(yùn)行時(shí)依賴系統(tǒng) snappy 庫
- 移植性差,容易報(bào)錯(cuò)
總結(jié)
你編譯 mongodb-3.4.19 分支,強(qiáng)烈推薦用方式 1(內(nèi)置模式),這是 MongoDB 自己用的編譯方式。
需要我再告訴你如何驗(yàn)證 snappy 是否真的編譯成功嗎?
五、驗(yàn)證編譯結(jié)果
# 查看版本(確認(rèn)是 2.9.2)
/usr/local/wt-2.9.2/bin/wt -V
# 輸出應(yīng)包含:WiredTiger version 2.9.2
六、使用注意事項(xiàng)(必看!)
-
必須關(guān)閉 MongoDB 服務(wù)才能使用
wt工具,否則數(shù)據(jù)文件被鎖定會(huì)報(bào)錯(cuò) - 操作前備份數(shù)據(jù)文件(
/var/lib/mongo目錄) - 常用命令示例:
# 檢查 WiredTiger 數(shù)據(jù)文件健康度 /usr/local/wt/bin/wt verify -h /var/lib/mongo # 導(dǎo)出集合數(shù)據(jù) /usr/local/wt/bin/wt dump -h /var/lib/mongo -f collection.dump collection-0-1234567890.wt
七、常見問題解決
-
snappy 依賴報(bào)錯(cuò)
重新安裝 snappy 開發(fā)庫:- CentOS:
yum install snappy snappy-devel - Ubuntu:
apt-get install libsnappy-dev
- CentOS:
-
編譯報(bào)錯(cuò) C++ 版本過低
CentOS 7 升級 gcc:yum install -y centos-release-scl yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ scl enable devtoolset-7 bash wt 無法打開 MongoDB 文件
99% 原因是 WiredTiger 版本不匹配,必須嚴(yán)格使用2.9.2版本編譯。
總結(jié)
- 編譯版本:WiredTiger 2.9.2(唯一匹配 MongoDB 3.4.19)
- 核心配置:必須開啟
--enable-snappy - 工具路徑:
/usr/local/wt/bin/wt-2.9.2 - 使用前提:關(guān)閉 MongoDB、備份數(shù)據(jù)