从命令行检查Berkeley DB文件

61

我在Linux文件系统上有一组Berkeley DB文件,我想查看它们的内容。

有哪些有用的工具可以快速概览这些文件的内容?我可以编写使用BDB模块来检查它们的Perl脚本,但我想要一些CLI实用程序来查看内部内容而不必开始编写脚本。

9个回答

61

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

在某些系统上,手册页面未安装,在这种情况下,可以在此处找到文档。默认情况下,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

5
应该是最佳答案。 - alexg

27

6
如何理解 db4.8_dump 或该软件包的其他输出,提供一个示例会很有用。转储手册甚至没有描述输出格式,甚至也没有描述“bytevalue”格式或其他格式。如果想要更美观的输出但不想寻找和安装软件包,可以参考使用 Python 的答案,例如 trjh 的答案。 - nealmcb
3
我的包被命名为 db-util - user123456

16

我发现@strickli的答案最有帮助,因为我不想在正在使用的数据库机器上添加任何新包。然而,我读取的数据库文件类型是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
...

10

正如其他答案中提到的那样,db-utils软件包(在RHEL下为db4-utils)具有一些工具。然而,db_dump可能不太有用,因为输出是“bytevalue”格式。

如果需要一个快速且简单的查看器,请使用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已被弃用。


6

安装了db utils之后,您可以在数据库文件上简单执行 db_dump 操作。


6

db_hotbackup工具创建Berkeley DB数据库环境的"热备份"或"热故障转移"快照。使用以下命令安装:

apt-get install db-util

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

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


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

1

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())

1
在Amazon Linux中,您可以使用以下命令安装它:
yum install db43-utils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接