Examinar archivos de la Base de datos Berkeley desde la CLI


Tengo un conjunto de archivos Berkeley DB en mi sistema de archivos Linux que me gustaría examinar.

¿Qué herramientas útiles existen para obtener una visión general rápida de los contenidos? Puedo escribir scripts Perl que usan módulos BDB para examinarlos, pero estoy buscando alguna utilidad CLI para poder echar un vistazo dentro sin tener que comenzar a escribir scripts.

Author: mercutio, 2008-09-01

8 answers

Echa un vistazo al paquete db-utils. Si usa apt, puede instalarlo con lo siguiente: apt-get install db4.4-util (o apt-get install db4.8-util o cualquier versión que tenga o prefiera.)

Enlaces adicionales:

 22
Author: David Crow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 20:56:58

Utilice el programa db_dump. Está contenido en el paquete core/db (Arch), db-util (Debian, Ubuntu), sys-libs/db (Gentoo, tenga en cuenta que aquí el binario se llama db4.8_dump o cualquier versión que esté usando).

En algunos sistemas las páginas de manual no están instaladas, en ese caso la documentación se puede encontrar aquí. De forma predeterminada, db_dump muestra algunos números hexadecimales, lo que no es realmente útil si está tratando de analizar el contenido de una base de datos. Utilice el argumento -p para cambiar este.

Mostrar todo lo que está en el archivo database.db:

db_dump -p database.db

Enumerar las bases de datos en el archivo database.db:

db_dump -l database.db

Mostrar solo el contenido de la base de datos mydb en el archivo database.db:

db_dump -p -s mydb database.db
 24
Author: cdauth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-20 01:47:41

Encontré que la respuesta de @strickli es la más útil, ya que no quería agregar ningún paquete nuevo a la máquina con la base de datos en la que estaba. Sin embargo, el archivo db que estaba leyendo era de tipo btree, no hash, así que tuve que usar 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
...
 13
Author: trjh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-11 16:48:57

Como se mencionó en las otras respuestas, el paquete db-utils (db4-utils bajo RHEL) tiene algunas herramientas. Sin embargo, db_dump puede no ser útil, ya que la salida es en formato 'bytevalue'.

Para un visor quick'n'dirty, use 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
...

Tenga en cuenta que dbhash está obsoleto desde python 2.6.

 9
Author: strickli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-05 16:07:06

La utilidad db_hotbackup crea instantáneas "hot backup" o "hot failover" de entornos de bases de datos Berkeley DB. Instalarlo con la siguiente

Apt-get install db-util

Luego ejecute el siguiente comando para tomar una copia de seguridad en caliente

Db_hotbackup [- cDEguVv] [- d data_dir ...] [- h inicio] [- l log_dir] [- P password] - b backup_dir

 6
Author: Ishtiaq Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-20 03:52:15

Una vez que haya instalado los utils de la base de datos, simplemente puede hacer un db_dump en el archivo de la base de datos.

 5
Author: Gunnarsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-15 00:55:27

Tenga en cuenta que la respuesta inicial dice usar el paquete "db-utils", pero el ejemplo muestra el paquete "db-util" correcto. (sin "s")

 3
Author: A.R. Pepper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-20 20:04:36

En Amazon Linux puede instalarlo con:

Yum install db43-utils

 2
Author: Dan Herman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-27 19:54:36