本文包含一个正常的部分——如何打印信息直接从原始使用wt WiredTiger文件转储,其次是非常重要的,否则非法信息,怎么去MongoDB二进制数据在WT表。
看到“WiredTiger文件取证(第1部分:构建“wt”)”:
- 如何构建“wt”实用程序命令吗
- 一个简短的描述它的命令行语法
- 如何设置wiredtiger_open()配置字符串需要
在这个页面的例子假设如下:
- WiredTiger.config或WIREDTIGER_CONFIG or the -C option is being used to give “wt” the right config string. Having said that – an empty “wt” config might work OK for you, at least until wt printlog.
- xxd bsondump,金桥安装。(见“Shell脚本格式化技巧”部分原因)。
[porto_content_box border_top_color = " " border_top_width =“2”bg_bottom_color =“红色”=“左”对齐)⚠警告:“wt”工具通常在读写方式打开文件,即使是命令你会认为是只读的。它会自动一步通过其正常的恢复过程的大部分时间,所以它可能会改变文件。
直到你知道它影响数据文件不会在你使用它只有宝贵的数据复制,复制拷贝的数据目录和学习放在第一位。[/ porto_content_box]
wt转储
的wt转储命令可以用来显示WiredTiger表文件的全部内容。它将输出表对象的头然后每个键和值。
wt转储有一个强制性的论证:uri。一个uri通常是“表:“+ WT识别字符串,或“文件:”+(相对)文件路径。如。”表:收集- 4 - 9876544321”或“文件:收集- 4 - 9876544321.wt”。
”表:“自动前缀到uriwt转储如果你不指定任何类型。
wt转储文件的格式可以是:
- “打印”键和值:将字符串打印ascii字符和\逃脱非输出字节的十六进制值。(又名形式打印)。
如。82 \ \ \ \ \ 03 _id \ 00 00 00 00 \ 0 a \ \ \ \ ff_id \ 00 00 00 00 \ \ 03马克斯\ 00 00…… - “六角”:键和值将显示连续0-9af十六进制字符。没有逃避或引用。
如。82000000035 f6964000a000000ff5f696400… - “json”键将显示为自然类型(只有纯数字的MongoDB 4.4 / WiredTiger 10.0.0,我认为)。值将显示为utf - 16,这没有意义——这是插入空字节每秒字节。(我怀疑这是一个当前版本的缺陷。)
如。“\ u0082 \ u0000 \ u0000 \ u0000 \ u0003 \ u005f \ u0069 \ u0064 \ u0000 \ u000a \ u0000 \ u0000 \ u0000 \ u00ff \ u005f \ u0069 \ u0064 \ u0000…。”
“打印”或“六角”输出一个固定格式的行:
| 行# | 场 | 样本 |
| 1 | WT库版本字符串 | WiredTiger转储(10.0.0 WiredTiger版本) |
| 2 | “wt转储”格式类型 | =十六进制格式 |
| 3 | 常量字符串“头” | 头 |
| 4 | URI | 表:收集- 10 - 5841128870485063129 |
| 5 | 配置字符串表的创建(WT_SESSION::创建) | access_pattern_hint = none, allocation_size = 4 kb, app_metadata =… |
| 6 | 常量字符串“数据” | 数据 |
| 7 8 |
第一个关键;它的价值 | e85d689139ffffdfc1 6400000011747300010000003 a91685d12680000000000000000… |
| 9 10 |
第二个关键;它的价值 | e85d68913bffffdfc1 e700000011747300010000003c91685d12740001000000000000…。 |
| … | (所有kv对重复) |
wt转储的- j JSON输出模式更容易阅读的眼,但当前值编码UTF -16字符串实际上是无用的。我不能摄取至少使用我喜欢的JSON工具。如。什么是二进制值82 00 00 00 03 5 f 69 64(8个字节)将输出作为“\ u0082 \ u0000 \ u0000 \ u0000 \ u0003 \ u005f \ u0069 \ u0064”(16字节)。二进制长度已翻了一番每个目的价值之间空字节字节。
本文中使用Shell脚本格式技巧
- xxd- r - p转换平原,[0-9a-fA-Z] *原始字节十六进制字符串。(注意“xxd rp”失败,静默失败。保持- r和p标记分隔在shell命令。)
- bsondump使用BSON从二进制转换为JSON。使用安静。
- 尾巴- n + 7跳过头的输出wt转储。
- awk是用来过滤掉钥匙(行号NR % 2 = = 1)或值(行号NR % 2 = = 0)的形式打印或十六进制模式wt转储。
- 金桥用于过滤和/或重新格式化bsondump和wt printlog输出。
(理想金桥将用于摄取的输出wt - j转储直接,但错误null-padded, bytes-as-UTF-16字符串编码目前输出失败。)
记录输出不受WT二进制格式
wt转储的输出的影响WiredTiger二进制格式使用。它将相同的表格格式类型,不管和修饰词如马克斯页面大小,关键的前缀,等等。
这意味着wt转储不会教给你的“物理”格式的数据。你唯一可以看到与此相关的是配置中使用的字符串WT_SESSION::创建当一个表是第一次。每次都是头部分所示wt转储运行。
|
1
2
3
4
5
6
|
美元wt转储文件:collection-0——4131298130356306083. wt
WiredTiger转储(10.0.0 WiredTiger版本)
=打印格式
头
文件:collection-0——4131298130356306083. wt
access_pattern_hint = none, allocation_size = 4 kb, app_metadata = (formatVersion = 1),维护= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好,block_compressor =上口,cache_resident = false,校验和=,colgroups =、校对机=、=、列字典= 0,加密= (keyid = name =),独家= false,器=、格式= btree huffman_key = huffman_value = ignore_in_memory_cache_size = false,不可变= false,进口=(启用= false, file_metadata =,修复= false), internal_item_max = 0, internal_key_max = 0, internal_key_truncate = true, internal_page_max = 4 kb, key_format = q, key_gap = 10, leaf_item_max = 0, leaf_key_max = 0, leaf_page_max = 32 kb, leaf_value_max = 64 mb,日志=(启用= false), lsm = (auto_throttle = true,布鲁姆= true, bloom_bit_count = 16, bloom_config = bloom_hash_count = 8, bloom_oldest = false, chunk_count_limit = 0, chunk_max = 5 gb, chunk_size = 10 mb, merge_custom =(前缀= start_generation = 0,后缀=),merge_max = 15, merge_min = 0), memory_page_image_max = 0, memory_page_max = 10 m, os_cache_dirty_max = 0, os_cache_max = 0, prefix_compression = false, prefix_compression_min = 4, readonly = false,源=,split_deepen_min_child = 0, split_deepen_per_child = 0, split_pct = 90,分层= (chunk_size = 1 gb,层=),tiered_storage = (auth_token =、桶= local_retention = 300,名称= object_target_size = 10米),type =文件,value_format = u, verbose = [], write_timestamp_usage =没有
|
通知你有很多空的和/或未使用的选项配置字符串,所以不要花一个选项的存在意味着它是被使用。如。以上我们看到lsm选项,尽管所有的桌子mongodb使btree(您可以确认的“格式= btree”选项)。
的wt验证子命令- d选项做显示的物理布局。可以说wt统计也是如此。但是这些不会被覆盖。
探索在MongoDB数据目录的元数据表
WiredTiger
打哈欠。只是一个版本字符串。把它看成是纯文本。
WiredTiger.turtle
相当无聊。URI指向WiredTiger版本信息。wt,配置字符串以打开它。把它看成是纯文本。
乌龟会很神奇,如果不在文件将被重塑。
WiredTiger.config
这是不WiredTiger数据文件。它有点像“wt”实用程序的资源文件命令。它不会由任何程序。它只会由你,或者一些不错的同事,拯救你于指定- c选项每次运行“wt”命令。看到以前的博客文章学习什么。
WiredTiger.lock
只是一个典型的锁文件。除了包含纯文本“WiredTiger锁文件”。自动创建和覆盖。
WiredTiger.wt
这是主WiredTiger存储引擎的元数据表。本身,它也是一个WiredTiger表,WiredTiger。海龟文件指向。
- 的键在这个表的URI字符串:
- 表:Wiredtiger表
- 文件:文件
- 系统:几个特殊的系统值,
- colgroup:指定表格中Colgroups。
表(Colgroups是一对一的方式MongoDB使用WiredTiger;我倾向于忘记他们的存在。)
- 的值表/文件/ colgroup WiredTiger-flavoured JSON配置字符串指定表格中WiredTiger使用时打开这些对象在其他API函数。
这个文件的全部内容是ascii-printable,键和值。WT所有print-safe c字符串标识符和配置值。你不会把它作为与其他表文件虽然容易!他们都包含二进制数值类型和BSON键和/或值。
WiredTiger.wtis不MongoDB的收藏目录和索引等。_mdb_catalog。wt(见后)。
有一个特殊的命令,只这集合——硬编码的抛售wt列表。默认情况下,过滤器的输出只是钥匙,此外,它排除了"系统:" +表/文件清单。即使你使用“- v”选项,它将仍然排除本身。
奖金练习:转储WiredTiger的内容。wt元数据文件像只是任何其他wt表
在其他记录,WiredTiger。wt文件包括“表:xxxx”键指向每一个表的URI。每个表除了本身。
所以你可以运行命令等- 0 - 4131298130356306083 wt转储集合,或- 8 - 5834121039240263510 wt转储索引或wt转储_mdb_catalog或wt转储sizeStorer,但你不能运行wt转储WiredTiger。
诀窍是使用的URI“文件:在前面。你还需要与“完整的文件名。wt”后缀,因为它是一个文件,而不是一个表URI。(wt转储假设”表:“作为类型前缀如果没有提供。)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61年
62年
63年
64年
|
美元wt转储文件:WiredTiger.wt
WiredTiger转储(10.0.0 WiredTiger版本)
=打印格式
头
文件:WiredTiger.wt
access_pattern_hint = none, allocation_size = 4 kb, app_metadata =断言= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好,block_compressor = cache_resident = false,校验和=未压缩,colgroups =、校对机=、=、列字典= 0,加密= (keyid = name =),独家= false,器=、格式= btree ..... huffman_key =
数据
colgroup:指定表格中_mdb_catalog \ 00
app_metadata = (formatVersion = 1),排序器=、=、列=“文件:_mdb_catalog.wt”,来源类型=文件\ 00
colgroup:指定表格中collection-0——4131298130356306083 \ 00
app_metadata = (formatVersion = 1),排序器=、=、列源=“文件:collection-0——4131298130356306083. wt类型=文件\ 00
colgroup:指定表格中collection-0——6422702119521843596 \ 00
app_metadata = (formatVersion = 1),排序器=、=、列源=“文件:collection-0——6422702119521843596. wt类型=文件\ 00
- 0 - 5834121039240263510、00 colgroup:指定表格中集合
app_metadata = (formatVersion = 1),排序器=、=、列源=“文件:收集- 0 - 5834121039240263510. wt”,类型=文件\ 00
- 0 - 5841128870485063129、00 colgroup:指定表格中集合
app_metadata = (formatVersion = 1),排序器=、=、列源=“文件:收集- 0 - 5841128870485063129. wt”,类型=文件\ 00
colgroup:指定表格中collection-10——4131298130356306083 \ 00
app_metadata = (formatVersion = 1),排序器=、=、列源=“文件:collection-10——4131298130356306083. wt类型=文件\ 00
colgroup:指定表格中收集- 10 - 5841128870485063129 \ 00
app_metadata = (formatVersion = 1, oplogKeyExtractionVersion = 1),排序器=、=、列源=“文件:收集- 10 - 5841128870485063129. wt”,类型=文件\ 00
colgroup:指定表格中收集- 11 - 5841128870485063129 \ 0
…
colgroup:指定表格中sizeStorer \ 00
app_metadata =、校对机=、列=、=“文件:sizeStorer.wt”来源,type =文件\ 00
文件:WiredTigerHS.wt \ 00
access_pattern_hint = none, allocation_size = 4 kb, app_metadata =断言= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好,block_compressor =上口,cache_resident = false,校验和=未压缩的,……
文件:_mdb_catalog.wt \ 00
access_pattern_hint = none, allocation_size = 4 kb, app_metadata = (formatVersion = 1),维护= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好,....
文件:collection-0——4131298130356306083. wt \ 00
access_pattern_hint = none, allocation_size = 4 kb, app_metadata = (formatVersion = 1),维护= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好的,
…
文件:sizeStorer.wt \ 00
access_pattern_hint = none, allocation_size = 4 kb, app_metadata =断言= (commit_timestamp = none, durable_timestamp = none, read_timestamp = none), block_allocation =最好,block_compressor =…
系统:检查点\ 00
checkpoint_timestamp = " 6088966 b00000001 " \ 00
系统:checkpoint_base_write_gen \ 00
base_write_gen = 104333 \ 00
系统:checkpoint_snapshot \ 00
snapshot_min = 1, snapshot_max = 1, snapshot_count = 0 \ 00
系统:古老\ 00
oldest_timestamp = " 6088966600000001 " \ 00
表:_mdb_catalog \ 00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:collection-0——4131298130356306083 \ 00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:collection-0——6422702119521843596 \ 00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:收集- 0 - 5834121039240263510、00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:收集- 0 - 5841128870485063129、00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:collection-10——4131298130356306083 \ 00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:收集- 10 - 5841128870485063129、00
app_metadata = (formatVersion = 1, oplogKeyExtractionVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
表:收集- 11 - 5841128870485063129、00
app_metadata = (formatVersion = 1), colgroups =、校对机=、=、列key_format = q, value_format = u \ 00
…
表:索引- 9 - 5841128870485063129 \ 00
app_metadata = (formatVersion = 8), colgroups =、校对机=、=、列key_format = u, value_format = u \ 00
表:sizeStorer \ 00
app_metadata =、colgroups =、校对机=、=、列key_format = u, value_format = u \ 00
|
_mdb_catalog.wt
这是目录/ MongoDB用户看到的模式。
|
1
2
3
4
5
6
7
8
|
$ #的被害者。可以“文件:_mdb_catalog URI。wt”、“表:_mdb_catalog”,还是“_mdb_catalog”
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | bsondump——安静
{“md”: {“ns”:“local.startup_log”、“选项”:{uuid:{" $二进制":{“base64”:“9 + oBmQXW7eou0SZFXPQ = =子宫切除术”,“子类型”:“04”}},“封顶”:真的,“大小”:{" $ numberInt”:“10485760”}},“索引”:[{“规范”:{" v ": {" $ numberInt”:“2”},“关键”:{" _id ": {" $ numberInt ": " 1 "}},“名字”:“_id_”、“ns”:“local.startup_log”},“准备好了”:真的,“多键”:假的,“multikeyPaths”: {" _id ":{" $二进制":{“base64”:“AA = =”,“子类型”:“00”}}},“头”:{" $ numberLong”:“0”},“前缀”:{" $ numberLong”:“1”},“backgroundSecondary”:假的,“runTwoPhaseBuild”:假的,“versionOfBuild”: {" $ numberLong ": " 1 "}}],“前缀”:{" $ numberLong ": " 1 "}},“idxIdent”: {“_id_”:“指数- 1 - 5841128870485063129”},“ns”:“local.startup_log”、“识别”:“收集- 0 - 5841128870485063129”}
{“isFeatureDoc”:真的,“ns”:空,“nonRepairable”: {" $ numberLong”:“0”},“修复”:{" $ numberLong ": " 1 "}}
{“md”: {“ns”:“local.replset.oplogTruncateAfterPoint”、“选项”:{uuid:{" $二进制":{“base64”:“8 kuki7n6tlihywjfxeekww = =”,“子类型”:“04”}}},“索引”:[{“规范”:{" v ": {" $ numberInt”:“2”},“关键”:{" _id ": {" $ numberInt ": " 1 "}},“名字”:“_id_”、“ns”:“local.replset.oplogTruncateAfterPoint”},“准备好了”:真的,“多键”:假的,“multikeyPaths”: {" _id ":{" $二进制":{“base64”:“AA = =”,“子类型”:“00”}}},“头”:{" $ numberLong”:“0”},“前缀”:{" $ numberLong”:“1”},“backgroundSecondary”:假的,“runTwoPhaseBuild”:假的,“versionOfBuild”: {" $ numberLong ": " 1 "}}],“前缀”:{" $ numberLong ": " 1 "}},“idxIdent”: {“_id_”:“指数- 3 - 5841128870485063129”},“ns”:“local.replset.oplogTruncateAfterPoint”、“识别”:“收集- 2 - 5841128870485063129”}
…
…
|
每个值是BSON的内容,你可以在上面的反序列化输出。只有一个文档,不是为一个集合,“isFeatureDoc”(见上图)。除了这一个,琐碎的例外,每个对象的字段有:
- 如“ns”。”测试。foo”、“配置。块”、“local.oplog.rs”
- “识别”的惟一标识符字符串WT表mongodb集合。如。“收集- 7 - 5834121039240263510”
- “idxIdent”:对象清单鉴别(ify)每个索引的集合(烦人他们分开内的索引定义”。索引”对象;见下文)。
- “医学博士”的元数据的集合。它有这些字段:
- “ns”(再一次)
- “选项”选项将通过创建命令集合。大多数集合将只有(自动分配)收集在这个对象UUID的价值,但是如果有一个非默认选项,如集合限制:真这里定义的。
- “索引”的数组索引规格,你会看到的,如果你运行db.collection.getIndexes ()。
确认东西匹配MongoDB的图景
如果你想证明你自己的信息_mdb_catalog WiredTiger表匹配的结果listDatabases (show dbs) listCollections(显示集合),和listIndexes (db.collection.getIndexes())在MongoDB,你可以搜索这些shell命令的文件:
集合及其指数的名单,与WT鉴别(ify)字符串
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥的选择(。| (md)) | {ns:营收,鉴别:.ident, idxIdent: .idxIdent}”
{
“ns”:“local.startup_log”,
“识别”:“收集- 0 - 5841128870485063129”,
" idxIdent ": {
:“_id_指数- 1 - 5841128870485063129”
}
}
{
“ns”:“local.replset.oplogTruncateAfterPoint”,
“识别”:“收集- 2 - 5841128870485063129”,
" idxIdent ": {
:“_id_指数——3 - 5841128870485063129”
}
}
…
…
|
列表的集合,他们创建的选项字符串:
|
1
2
3
4
5
6
7
8
9
10
|
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥的选择(。| (md)) |。海事| {ns:新债,选择:.options}’
{
“ns”:“local.startup_log”,
"选项":{
uuid:{" $二进制":{“base64”:“9 + oBmQXW7eou0SZFXPQ = =子宫切除术”,“子类型”:“04”}},
“封顶”:没错,
“大小”:{" $ numberInt”:“10485760”}
}
}
....
|
索引定义(又名指数规格):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
|
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥的选择(。| (md)) |。海事| {ns:营收,索引:.indexes}’
{
“ns”:“local.startup_log”,
“索引”:(
{
“规范”:{" v ": {" $ numberInt”:“2”},
“关键”:{
“_id”: {" $ numberInt ": " 1 "}
},
“名称”:“_id_”,
“ns”:“local.startup_log”
},
“准备好了”:没错,
“多键”:假的,
" multikeyPaths ": {
" _id ":{" $二进制":{“base64”:“AA = =”,“子类型”:“00”}
}
},
“头”:{" $ numberLong ": " 0 "},
....
|
输出一个一样WT鉴别表(ify)值与集合名称空间
|
1
2
3
4
5
6
7
8
|
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥- r的选择(。| (md)) | (。鉴别,. ncn] | @tsv”|排序
collection-0——4131298130356306083 config.cache.chunks.test.bar
- 0 - 5834121039240263510 local.replset.initialSyncId集合
- 0 - 5841128870485063129 local.startup_log集合
collection-0——6422702119521843596 config.system.sessions
collection-10——4131298130356306083 config.cache.chunks.test.foo
…
…
|
输出一个一样WT鉴别表(ify)值与索引
以下输出三列:WT识别价值,集合名称,索引名称。
|
1
2
3
4
5
6
7
8
|
wt抛售美元- x表:_mdb_catalog | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥- r的选择(。| (“idxIdent”)) | .美元望远镜| .idxIdent | to_entries [] | (。美元价值,望远镜,。key] | @tsv”|排序
index-11——4131298130356306083 config.cache.chunks.test。foo _id_
index-12——4131298130356306083 config.cache.chunks.test。foo lastmod_1
- 12 - 5841128870485063129 local.system指数。replset _id_
索引1——4131298130356306083 config.cache.chunks.test。酒吧_id_
- 14 - 5841128870485063129 admin.system指数。版本_id_
…
…
|
sizeStorer.wt
只是一个表的BSON值。MongoDB商店和BSON文档数据大小和记录计数为每个MongoDB在这里集合。钥匙不是mongodb收集ns价值虽然——他们是WT URI /鉴别价值。你必须映射到的输出wt转储_mdb_catalog找出哪些数量和大小的集合。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ #打印键
美元wt转储表:sizeStorer |尾巴- n + 7 | awk的NR % 2 = = 1{打印}' |头
表:_mdb_catalog
表:collection-0——2823106041799591351
表:collection-0——4131298130356306083
表:collection-0——6422702119521843596
…
…
$ #打印bson数据值
wt抛售美元- x表:sizeStorer | tail - n + 7 | awk的NR % 2 = = 0{打印}' | xxd - r - p | | bsondump——安静金桥- c。
{" numRecords ": {" $ numberLong”:“37”},“dataSize”: {" $ numberLong ": " 16930 "}}
{" numRecords ": {" $ numberLong ": " 1 "},“dataSize”: {" $ numberLong ": " 22 "}}
{" numRecords ": {" $ numberLong ": " 1 "},“dataSize”: {" $ numberLong ": " 130 "}}
{" numRecords ": {" $ numberLong ": " 0 "},“dataSize”: {" $ numberLong ": " 0 "}}
…
|
storage.bson
不是一个WiredTiger的一部分。几个storage-engine-related选项被保存到一个文件在dbPath数据目录MongoDB层上面可以重启知道directoryPerDB等选项使用上次使用的数据。
把它用bsondump storage.bson(安静)。
应用程序(= MongoDB)表
的- * .wt集合和指数- * .wtMongoDB的文件包含的数据收集和索引,你观察作为一个客户端连接到MongoDB实例。
这些都不是WiredTiger元数据我们将讨论他们在接下来的博客(WiredTiger文件取证第3部分:查看所有的MongoDB数据)。首先虽然可以使用wt转储- x系列- * * * - n + 7 | |尾awk的{NR % 2 = 0} | bsondump安静方法对早期的bsondump _mdb_catalog- * .wt集合。
通知你这些文件不包含任何的自己的MongoDB目录信息。你可以看到数据,但你不能看到集合的索引,甚至一个集合的mongodb ns(名称空间)。你总是需要转储的BSON数据_mdb_catalog wiredtiger表信息来得到。
WiredTiger的事务日志文件
的/ WiredTigerLog》杂志上。NNNNNNNN文件是WiredTiger的事务日志文件,写前日志。这是唯一一个在磁盘上保存写道,尚未被刷新到收集- *。wt - *和索引。wt文件在一个检查站。
你通常不需要关注具体的日志文件号码当你与他们合作,他们作为一个序列,从一开始就被自动迭代。
你把他们wt printlog而不是wt转储。输出始终是JSON,但是额外的十六进制版本的键和值在操作可以包括通过使用- x选项。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
|
20美元wt printlog |头- n
(
{“lsn”: [72128],
“hdr_flags”:“”,
“rec_len”: 128年,
“mem_len”: 128年,
“类型”:“系统”,
“行动”:[
{“optype”:“prev_lsn”,
“prev_lsn”(1,0):
}
]
},
{“lsn”: [72256],
“hdr_flags”:“”,
“rec_len”: 128年,
“mem_len”: 128年,
“类型”:“系统”,
“行动”:[
{“optype”:“checkpoint_start”,
…
|
这只是一个起动器使用看wiredtiger事务日志文件(又名mongodb文件)》杂志上。的意思lsn数字;如何识别集合行动[].fileid;如何找到oplog写道;为什么没有写多收藏,是物质的一天。
你可以忽略WiredTigerPreplog. *文件,它们是空的。他们预先分配的文件系统,以减少可能发生的延迟,做open()系统调用;他们只是第二WiredTigerLog更名为。*文件时,它是必要的。
总结
wt转储是主要的命令将使用看WiredTiger表。wt列表是一个倾倒的快捷方式从最顶层的表记录的一个子集(WiredTiger.wt)。
wt printlog是需要查看的命令完全不同的事务日志文件。的写前日志WiredTiger,被称为在MongoDB》杂志上。
知道如何遵循WiredTiger元数据的层次结构,其次是MongoDB目录,是至关重要的,开始反省MongoDB的数据目录中。
另一个关键的理解是,WiredTiger存储键和值与任何类型的指标作为原始二进制值,所以你必须提前知道这些,和/或成为一个熟练的二进制侦探。它的长和短虽然是:WiredTiger的元数据很简单,ascii-printable字符串;所有其他表通常BSON或纯整数类型。(好吧,一个额外的:一个特殊的脱水keystring包装格式,定义的MongoDB层,在指数- * .wt文件。)
查看下一个博客(WiredTiger文件取证第3部分:查看所有MongoDB的数据),看看如何将数据放在一起,并提取任何信息,你觉得如MongoDB用户。
雷竞技下载官网MongoDB Percona分布是一个免费的MongoDB数据库选择,给你一个解决方案,结合了最好的和最重要的开放源码社区的企业组件,设计和测试一起工作。






