mirror of
https://github.com/etcd-io/bbolt.git
synced 2025-05-01 13:13:32 +00:00
Documentation: added a doc for bbolt command-line.
Signed-off-by: Ishan Tyagi <ishantyagi25@gmail.com>
This commit is contained in:
parent
f697249110
commit
81634ce08c
382
cmd/bbolt/README.md
Normal file
382
cmd/bbolt/README.md
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
# Introduction to bbolt command line
|
||||||
|
|
||||||
|
`bbolt` provides a command line utility for inspecting and manipulating bbolt database files. To install bbolt command-line please refer [here](https://github.com/etcd-io/bbolt#installing)
|
||||||
|
|
||||||
|
**Note**: [etcd](https://github.com/etcd-io/etcd) uses bbolt as its backend storage engine. In this document, we take etcd as an example to demonstrate the usage of bbolt commands. Refer to [install etcd](https://etcd.io/docs/v3.5/install/) for installing etcd.
|
||||||
|
|
||||||
|
1. Start a single member etcd cluster with this command below:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$etcd
|
||||||
|
```
|
||||||
|
|
||||||
|
It will create a directory `default.etcd` by default under current working directory, and the directory structure will look like this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$tree default.etcd
|
||||||
|
default.etcd
|
||||||
|
└── member
|
||||||
|
├── snap
|
||||||
|
│ └── db // this is bbolt database file
|
||||||
|
└── wal
|
||||||
|
└── 0000000000000000-0000000000000000.wal
|
||||||
|
|
||||||
|
3 directories, 2 files
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Put some dummy data using [etcdctl](https://github.com/etcd-io/etcd/tree/main/etcdctl).
|
||||||
|
3. Stop the etcd instance. Note a bbolt database file can only be opened by one read-write process, because it is exclusively locked when opened.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- `bbolt command [arguments]`
|
||||||
|
|
||||||
|
### help
|
||||||
|
|
||||||
|
- help will print information about that command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt help
|
||||||
|
|
||||||
|
The commands are:
|
||||||
|
|
||||||
|
bench run synthetic benchmark against bbolt
|
||||||
|
buckets print a list of buckets
|
||||||
|
check verifies integrity of bbolt database
|
||||||
|
compact copies a bbolt database, compacting it in the process
|
||||||
|
dump print a hexadecimal dump of a single page
|
||||||
|
get print the value of a key in a bucket
|
||||||
|
info print basic info
|
||||||
|
keys print a list of keys in a bucket
|
||||||
|
help print this screen
|
||||||
|
page print one or more pages in human readable format
|
||||||
|
pages print list of pages with their types
|
||||||
|
page-item print the key and value of a page item.
|
||||||
|
stats iterate over all pages and generate usage stats
|
||||||
|
surgery perform surgery on bbolt database
|
||||||
|
```
|
||||||
|
|
||||||
|
- you can use `help` with any command: `bbolt [command] -h` for more information about command.
|
||||||
|
|
||||||
|
## Analyse bbolt database with bbolt command line
|
||||||
|
|
||||||
|
### info
|
||||||
|
|
||||||
|
- `info` print the basic information about the given Bbolt database.
|
||||||
|
- usage:
|
||||||
|
`bbolt info [path to the bbolt database]`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt info ~/default.etcd/member/snap/db
|
||||||
|
Page Size: 4096
|
||||||
|
```
|
||||||
|
|
||||||
|
- **note**: page size is given in bytes
|
||||||
|
- Bbolt database is using page size of 4KB
|
||||||
|
|
||||||
|
### buckets
|
||||||
|
|
||||||
|
- `buckets` print a list of buckets of Bbolt database is currently having. Find more information on buckets [here](https://github.com/etcd-io/bbolt#using-buckets)
|
||||||
|
- usage:
|
||||||
|
`bbolt buckets [path to the bbolt database]`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt buckets ~/default.etcd/member/snap/db
|
||||||
|
alarm
|
||||||
|
auth
|
||||||
|
authRoles
|
||||||
|
authUsers
|
||||||
|
cluster
|
||||||
|
key
|
||||||
|
lease
|
||||||
|
members
|
||||||
|
members_removed
|
||||||
|
meta
|
||||||
|
```
|
||||||
|
|
||||||
|
- It means when you start an etcd, it creates these `10` buckets using bbolt database.
|
||||||
|
|
||||||
|
### check
|
||||||
|
|
||||||
|
- `check` opens a database at a given `[PATH]` and runs an exhaustive check to verify that all pages are accessible or are marked as freed. It also verifies that no pages are double referenced.
|
||||||
|
- usage:
|
||||||
|
`bbolt check [path to the bbolt database]`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt check ~/default.etcd/member/snap/db
|
||||||
|
ok
|
||||||
|
```
|
||||||
|
|
||||||
|
- It returns `ok` as our database file `db` is not corrupted.
|
||||||
|
|
||||||
|
### stats
|
||||||
|
|
||||||
|
- To gather essential statistics about the bbolt database: `stats` performs an extensive search of the database to track every page reference. It starts at the current meta page and recursively iterates through every accessible bucket.
|
||||||
|
- usage:
|
||||||
|
`bbolt stats [path to the bbolt database]`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt stats ~/default.etcd/member/snap/db
|
||||||
|
Aggregate statistics for 10 buckets
|
||||||
|
|
||||||
|
Page count statistics
|
||||||
|
Number of logical branch pages: 0
|
||||||
|
Number of physical branch overflow pages: 0
|
||||||
|
Number of logical leaf pages: 0
|
||||||
|
Number of physical leaf overflow pages: 0
|
||||||
|
Tree statistics
|
||||||
|
Number of keys/value pairs: 11
|
||||||
|
Number of levels in B+tree: 1
|
||||||
|
Page size utilization
|
||||||
|
Bytes allocated for physical branch pages: 0
|
||||||
|
Bytes actually used for branch data: 0 (0%)
|
||||||
|
Bytes allocated for physical leaf pages: 0
|
||||||
|
Bytes actually used for leaf data: 0 (0%)
|
||||||
|
Bucket statistics
|
||||||
|
Total number of buckets: 10
|
||||||
|
Total number on inlined buckets: 10 (100%)
|
||||||
|
Bytes used for inlined buckets: 780 (0%)
|
||||||
|
```
|
||||||
|
|
||||||
|
### pages
|
||||||
|
|
||||||
|
- Pages prints a table of pages with their type (meta, leaf, branch, freelist).
|
||||||
|
- The `meta` will store the metadata information of database.
|
||||||
|
- The `leaf` and `branch` pages will show a key count in the `items` column.
|
||||||
|
- The `freelist` will show the number of free pages, which are free for writing again.
|
||||||
|
- The `overflow` column shows the number of blocks that the page spills over into.
|
||||||
|
- usage:
|
||||||
|
`bbolt pages [path to the bbolt database]`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt pages ~/default.etcd/member/snap/db
|
||||||
|
ID TYPE ITEMS OVRFLW
|
||||||
|
======== ========== ====== ======
|
||||||
|
0 meta 0
|
||||||
|
1 meta 0
|
||||||
|
2 free
|
||||||
|
3 leaf 10
|
||||||
|
4 freelist 2
|
||||||
|
5 free
|
||||||
|
```
|
||||||
|
|
||||||
|
### page
|
||||||
|
|
||||||
|
- Page prints one or more pages in human readable format.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bolt page [path to the bbolt database] pageid [pageid...]
|
||||||
|
or: bolt page --all [path to the bbolt database]
|
||||||
|
|
||||||
|
Additional options include:
|
||||||
|
|
||||||
|
--all
|
||||||
|
prints all pages (only skips pages that were considered successful overflow pages)
|
||||||
|
--format-value=auto|ascii-encoded|hex|bytes|redacted (default: auto)
|
||||||
|
prints values (on the leaf page) using the given format
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt page ~/default.etcd/member/snap/db 3
|
||||||
|
Page ID: 3
|
||||||
|
Page Type: leaf
|
||||||
|
Total Size: 4096 bytes
|
||||||
|
Overflow pages: 0
|
||||||
|
Item Count: 10
|
||||||
|
|
||||||
|
"alarm": <pgid=0,seq=0>
|
||||||
|
"auth": <pgid=0,seq=0>
|
||||||
|
"authRoles": <pgid=0,seq=0>
|
||||||
|
"authUsers": <pgid=0,seq=0>
|
||||||
|
"cluster": <pgid=0,seq=0>
|
||||||
|
"key": <pgid=0,seq=0>
|
||||||
|
"lease": <pgid=0,seq=0>
|
||||||
|
"members": <pgid=0,seq=0>
|
||||||
|
"members_removed": <pgid=0,seq=0>
|
||||||
|
"meta": <pgid=0,seq=0>
|
||||||
|
```
|
||||||
|
|
||||||
|
- It prints information of page `page ID: 3`
|
||||||
|
|
||||||
|
### page-item
|
||||||
|
|
||||||
|
- page-item prints a page item's key and value.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bolt page-item [options] [path to the bbolt database] <pageId> <itemId>
|
||||||
|
Additional options include:
|
||||||
|
|
||||||
|
--key-only
|
||||||
|
Print only the key
|
||||||
|
--value-only
|
||||||
|
Print only the value
|
||||||
|
--format
|
||||||
|
Output format. One of: auto|ascii-encoded|hex|bytes|redacted (default=ascii-encoded)
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt page-item --key-only ~/default.etcd/member/snap/db 3 7
|
||||||
|
"members"
|
||||||
|
```
|
||||||
|
|
||||||
|
- It returns the key as `--key-only` flag is passed of `pageID: 3` and `itemID: 7`
|
||||||
|
|
||||||
|
### dump
|
||||||
|
|
||||||
|
- Dump prints a hexadecimal dump of one or more given pages.
|
||||||
|
- usage:
|
||||||
|
`bolt dump [path to the bbolt database] [pageid...]`
|
||||||
|
|
||||||
|
### keys
|
||||||
|
|
||||||
|
- Print a list of keys in the given bucket.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bolt keys [path to the bbolt database] [BucketName]
|
||||||
|
|
||||||
|
Additional options include:
|
||||||
|
--format
|
||||||
|
Output format. One of: auto|ascii-encoded|hex|bytes|redacted (default=bytes)
|
||||||
|
```
|
||||||
|
|
||||||
|
Example 1:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt keys ~/default.etcd/member/snap/db meta
|
||||||
|
confState
|
||||||
|
consistent_index
|
||||||
|
term
|
||||||
|
```
|
||||||
|
|
||||||
|
- It list all the keys in bucket: `meta`
|
||||||
|
|
||||||
|
Example 2:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt keys ~/default.etcd/member/snap/db members
|
||||||
|
8e9e05c52164694d
|
||||||
|
```
|
||||||
|
|
||||||
|
- It list all the keys in `members` bucket which is a `memberId` of etcd cluster member.
|
||||||
|
- In this case we are running a single member etcd cluster, hence only `one memberId` is present. If we would have run a `3` member etcd cluster then it will return a `3 memberId` as `3 cluster members` would have been present in `members` bucket.
|
||||||
|
|
||||||
|
### get
|
||||||
|
|
||||||
|
- Print the value of the given key in the given bucket.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bolt get [path to the bbolt database] [BucketName] [Key]
|
||||||
|
|
||||||
|
Additional options include:
|
||||||
|
--format
|
||||||
|
Output format. One of: auto|ascii-encoded|hex|bytes|redacted (default=bytes)
|
||||||
|
--parse-format
|
||||||
|
Input format (of key). One of: ascii-encoded|hex (default=ascii-encoded)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Example 1:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt get --format=hex ~/default.etcd/member/snap/db meta term
|
||||||
|
0000000000000004
|
||||||
|
```
|
||||||
|
|
||||||
|
- It returns the value present in bucket: `meta` for key: `term` in hexadecimal format.
|
||||||
|
|
||||||
|
Example 2:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt get ~/default.etcd/member/snap/db members 8e9e05c52164694d
|
||||||
|
{"id":10276657743932975437,"peerURLs":["http://localhost:2380"],"name":"default","clientURLs":["http://localhost:2379"]}
|
||||||
|
```
|
||||||
|
|
||||||
|
- It returns the value present in bucket: `members` for key: `8e9e05c52164694d`.
|
||||||
|
|
||||||
|
### compact
|
||||||
|
|
||||||
|
- Compact opens a database at given `[Source Path]` and walks it recursively, copying keys as they are found from all buckets, to a newly created database at `[Destination Path]`. The original database is left untouched.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bbolt compact [options] -o [Destination Path] [Source Path]
|
||||||
|
|
||||||
|
Additional options include:
|
||||||
|
|
||||||
|
-tx-max-size NUM
|
||||||
|
Specifies the maximum size of individual transactions.
|
||||||
|
Defaults to 64KB
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt compact -o ~/db.compact ~/default.etcd/member/snap/db
|
||||||
|
16805888 -> 32768 bytes (gain=512.88x)
|
||||||
|
```
|
||||||
|
|
||||||
|
- It will create a compacted database file: `db.compact` at given path.
|
||||||
|
|
||||||
|
### bench
|
||||||
|
|
||||||
|
- run synthetic benchmark against bbolt database.
|
||||||
|
- usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage:
|
||||||
|
-batch-size int
|
||||||
|
|
||||||
|
-blockprofile string
|
||||||
|
|
||||||
|
-count int
|
||||||
|
(default 1000)
|
||||||
|
-cpuprofile string
|
||||||
|
|
||||||
|
-fill-percent float
|
||||||
|
(default 0.5)
|
||||||
|
-key-size int
|
||||||
|
(default 8)
|
||||||
|
-memprofile string
|
||||||
|
|
||||||
|
-no-sync
|
||||||
|
|
||||||
|
-path string
|
||||||
|
|
||||||
|
-profile-mode string
|
||||||
|
(default "rw")
|
||||||
|
-read-mode string
|
||||||
|
(default "seq")
|
||||||
|
-value-size int
|
||||||
|
(default 32)
|
||||||
|
-work
|
||||||
|
|
||||||
|
-write-mode string
|
||||||
|
(default "seq")
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$bbolt bench ~/default.etcd/member/snap/db -batch-size 400 -key-size 16
|
||||||
|
# Write 68.523572ms (68.523µs/op) (14593 op/sec)
|
||||||
|
# Read 1.000015152s (11ns/op) (90909090 op/sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
- It runs a benchmark with batch size of `400` and with key size of `16` while for others parameters default value is taken.
|
Loading…
x
Reference in New Issue
Block a user