从 CLI 检查 Berkeley DB 文件

Posted

技术标签:

【中文标题】从 CLI 检查 Berkeley DB 文件【英文标题】:Examining Berkeley DB files from the CLI 【发布时间】:2008-09-01 09:10:27 【问题描述】:

我想检查我的 Linux 文件系统上的一组 Berkeley DB 文件。

有哪些有用的工具可以快速浏览内容?我可以编写使用 BDB 模块来检查它们的 Perl 脚本,但我正在寻找一些 CLI 实用程序,以便能够查看内部而无需开始编写脚本。

【问题讨论】:

【参考方案1】:

使用db_dump 程序。它包含在包core/db(Arch)、db-util(Debian、Ubuntu)、sys-libs/db(Gentoo,请注意这里的二进制文件称为db4.8_dump 或您使用的任何版本)。

在某些系统上没有安装手册页,在这种情况下可以找到文档here。默认情况下,db_dump 输出一些十六进制数字,如果您尝试分析数据库的内容,这并不是很有用。使用 -p 参数来改变它。

显示文件database.db中的所有内容:

db_dump -p database.db

列出文件database.db中的数据库:

db_dump -l database.db

在文件database.db中只显示数据库mydb的内容:

db_dump -p -s mydb database.db

【讨论】:

应该是最佳答案【参考方案2】:

查看 db-utils 包。如果您使用 apt,则可以使用以下命令安装它:apt-get install db-util(或 apt-get install db4.8-util 或您拥有或喜欢的任何版本。)

其他链接:

http://rpmfind.net/linux/rpm2html/search.php?query=db-utils https://packages.ubuntu.com/search?suite=default&section=all&arch=any&keywords=db-util&searchon=names Man page of db4.4_dump

【讨论】:

如何理解 db4.8_dump 的输出或该包中的任何内容的示例会很方便。转储手册页本身甚至没有描述输出格式,甚至没有描述'bytevalue'格式或任何它......对于更漂亮的输出,无需查找和安装包,请参阅答案使用 python,例如通过 trjh。 我的包是db-util命名的【参考方案3】:

我发现@strickli 的回答最有帮助,因为我不想将任何新包添加到我所在数据库的机器上。但是,我正在读取的 db 文件是 btree 类型,而不是 hash,所以我不得不使用 bsddb

# file foo.db
foo.db: Berkeley DB (Btree, version 9, native byte-order)

# python
>>> import bsddb
>>> for k, v in bsddb.btopen("*<db filename here...>*").iteritems():
...     print k,v
...

【讨论】:

【参考方案4】:

正如其他答案中提到的,db-utils 包(RHEL 下的 db4-utils)有一些工具。但是,db_dump 可能没什么用,因为输出是 'bytevalue' 格式。

对于快速'n'dirty查看器,使用python:

me@machine$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
>>> import dbhash
>>> for k, v in dbhash.open( *<db filename here...>* ).iteritems(): print k, v
...

请注意,从 python 2.6 开始不推荐使用 dbhash。

【讨论】:

【参考方案5】:

db_hotbackup 实用程序创建 Berkeley DB 数据库环境的“热备份”或“热故障转移”快照。使用以下方式安装它

apt-get install db-util

然后运行以下命令进行热备份

db_hotbackup [-cDEguVv] [-d data_dir ...] [-h home] [-l log_dir] [-P 密码] -b backup_dir

【讨论】:

【参考方案6】:

一旦您安装了 db utils,您就可以简单地对 db 文件执行 db_dump

【讨论】:

【参考方案7】:

请注意,最初的答案是使用“db-utils”包,但该示例显示了正确的“db-util”包。 (没有“s”)

【讨论】:

【参考方案8】:

在 Amazon Linux 下你可以安装它:

yum install db43-utils

【讨论】:

【参考方案9】:

Python 3

from bsddb3 import db
import collections
d = db.DB()
d.open('./file.dat', 'dbname', db.DB_BTREE, db.DB_THREAD | db.DB_RDONLY)
d.keys()
collections.OrderedDict((k, d[k]) for k in d.keys())

【讨论】:

以上是关于从 CLI 检查 Berkeley DB 文件的主要内容,如果未能解决你的问题,请参考以下文章

db_dump(berkeley db) 的奇怪结果

如何从 berkeley db 转储特定的颠覆路径?

从 Java 中的另一个类访问 berkeley db

数据库连接 MySQL 或 Berkeley DB

替换 libdb 文件以升级 Berkeley DB?

Berkeley DB 读取数据失败