经验大分享:TDB文件介绍

简介: 经验大分享:TDB文件介绍

samba在运行时,Samba 存储许多信息,从本地密码到希望从中收到信息的一系列客户端。这类数据其中一些是暂时的,在 Samba 重启时可能会被丢弃,但是另一些却是永久的,不会被丢弃。这类数据可能是很大的,也可能是不经常访问只是在内存中保留,或者在重启时保持存在。要满足这些要求,Samba 团队创建了 Trivial Database。它实际上是一个键值存储,这意味着数据通过惟一键的方式存储和检索,且没有像在关系数据库中那样的表联接。键值存储 — 尤其是 TDB — 被设计成将数据存储到磁盘并将其取回的一种快速方式。

查看samba下tdb文件,只列出/var/lib/samba下面的,还有很多其他目录存在samba tdb文件。

【root@node1 samba】# cd /var/lib/samba/

【root@node1 samba】# ll

total 2236

-rw——- 1 root root 421888 Apr 23 15:10 account_policy.tdb

drwxr-xr-x 1 root root 0 Nov 28 00:21 drivers

-rw-r–r– 1 root root 425984 Apr 23 15:10 gencache.tdb

-rw——- 1 root root 696 Apr 23 15:10 group_mapping.tdb

drwxr-xr-x 1 root root 456 Apr 23 15:10 lock

drwxr-xr-x 1 root root 0 Apr 23 15:10 printing

drwx—— 1 root root 86 Apr 23 17:21 private

-rw——- 1 root root 528384 Apr 23 15:10 registry.tdb

-rw——- 1 root root 421888 Apr 23 15:10 share_info.tdb

-rw-r–r– 1 root root 483328 Apr 23 17:43 smbprofile.tdb

drwxr-x— 1 root wbpriv 0 Nov 28 00:21 winbindd_privileged

至于这些tdb文件如何查看数据,以及修改备份,下面介绍samba自带的几个tdb工具。

tdbtool工具介绍

tdbtool工具可以在命令行上接受命令,也可以打开交互式控制台类似shell一样。要在命令行上完成任务,请运行 tdbtool

example.tdb command options,其中 example.tdb 是文件名,command

是命令,针对命令的选项位于最后。要使用 tdb shell,只需单独运行 tdbtool

或在命令行上传递文件的名称。个人建议使用交互式控制台方式。以下是tdbtool参数介绍

tdbtool:

create dbname : create a database

open dbname : open an existing database

transaction_start : start a transaction

transaction_commit : commit a transaction

transaction_cancel : cancel a transaction

erase : erase the database

dump : dump the database as strings

keys : dump the database keys as strings

hexkeys : dump the database keys as hex values

info : print summary info about the database

insert key data : insert a record

move key file : move a record to a destination tdb

storehex key data : store a record (replace), key/value in hex format

store key data : store a record (replace)

show key : show a record by key

delete key : delete a record by key

list : print the database hash table and freelist

free : print the database freelist

freelist_size : print the number of records in the freelist

check : check the integrity of an opened database

repack : repack the database

speed : perform speed tests on the database

! command : execute system command

1 | first : print the first record

n | next : print the next record

q | quit : terminate

\n : repeat ‘next’ command

下面分别介绍:

1、创建数据库

【root@node1 tdbtest】# tdbtool

tdb> create hello

【root@node1 tdbtest】# ll

total 4

-rw——- 1 root root 696 Apr 23 15:53 hello

2、打开数据库

tdb> open hello

3、插入数据

tdb> insert name zhangsan

4、查询数据

tdb> show name

key 4 bytes

name

data 8 bytes

【000】 7A 68 61 6E 67 73 61 6E zhangsan

5、查看所有数据

tdb> dump

key 5 bytes

name1

data 4 bytes

【000】 6C 69 73 69 lisi

key 4 bytes

name

data 8 bytes

【000】 7A 68 61 6E 67 73 61 6E zhangsan

总共2条KEY/VALUES键值对,既2条数据信息。

6、列出key值

tdb> keys

key 5 bytes: name1

key 4 bytes: name

7、修改values值

tdb> store name zhang

Storing key:

key 4 bytes

name

data 5 bytes

【000】 7A 68 61 6E 67 zhang

将name值由zhangsan 修改为zhang,查看修改结果

tdb> dump

key 5 bytes

name1

data 4 bytes

【000】 77 61 6E 67 77 75 lisi

key 4 bytes

name

data 5 bytes

【000】 7A 68 61 6E 67 zhang

8、删除某个key值

tdb> delete name

tdb> dump

key 5 bytes

name1

data 4 bytes

【000】 6C 69 73 69 lisi

将key值为name的删掉后,查看只剩下name1记录。

9、检查数据完整性

tdb> check

Database integrity is OK and has 2 records.

10、复制数据到另外的数据库(后者数据库必须存在)

tdb> move name2 hello1

key 5 bytes

name2

data 6 bytes

【000】 77 61 6E 67 77 75 wangwu

record moved

查看hello1记录

tdb> open hello1

tdb> dump

key 5 bytes

name2

data 6 bytes

【000】 77 61 6E 67 77 75 wangwu

11、执行系统命令

tdb> ! pwd

/root/tdbtest

tdb> ! date

Mon Apr 23 16:36:18 CST 2018

12、支持事务处理

开启事务

tdb> transaction_start

tdb> insert name3 test

tdb> show name3

key 5 bytes

name3

data 4 bytes

【000】 74 65 73 74 test

取消事务

tdb> transaction_cancel

tdb> show name3

fetch failed

提交事务

tdb> transaction_start

tdb> insert name3 test

tdb> transaction_commit

tdb> show name3

key 5 bytes

name3

data 4 bytes

【000】 74 65 73 74 test

tdbdump 工具介绍

tdbdump是用来查看tdb文件中的所有键值对数据的工具

已hello为例, 查看所有数据

【root@node1 tdbtest】# tdbdump hello

{

key(5) = “name1”

data(4) = “lisi”

}

{

key(5) = “name2”

data(6) = “wangwu”

}

{

key(5) = “name3”

data(4) = “test”

}

每个键值对数据key data 数字为字节数

tdbbackup 工具介绍

tdbbackup工具为tdb数据库文件的备份工具。

– 备份hello数据库

【root@node1 tdbtest】# tdbbackup hello

【root@node1 tdbtest】# ll

total 828

-rw——- 1 root root 8//代码效果参考:http://www.zidongmutanji.com/bxxx/17784.html

31488 Apr 23 16:42 hello

-rw——- 1 root root 8192 Apr 23 16:38 hello1

-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

hello.bak就是备份文件。这里发现两者文件大小不一样,通过md5对比。因为是不同的文件,文件MD5值肯定是不一样的,但是文件内容是完全一样的。

查看文件md5

【root@node1 tdbtest】# md5sum hello

8c55e7dabbeab30e3cd96e96b59fb052 hello

【root@node1 tdbtest】# md5sum hello.bak

c20b4f9b01f5715bbec8f950cf394f51 hello.bak

查看文件内容md5

【root@node1 tdbtest】# tdbdump hello | md5sum

88be32a888d3cd63132e09a0de8d69de –

【root@node1 tdbtest】# tdbdump hello.bak | md5sum

88be32a888d3cd63132e09a0de8d69de –

– 恢复hello数据

模拟删除数据

【root@node1 tdbtest】# ll

total 828

-rw——- 1 root root 831488 Apr 23 16:42 hello

-rw——- 1 root root 8192 Apr 23 16:38 hello1

-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

【root@node1 tdbtest】# >hello

【root@node1 //代码效果参考:http://www.zidongmutanji.com/bxxx/174752.html

tdbtest】# ll

total 16

-rw——- 1 root root 0 Apr 23 17:33 hello

-rw——- 1 root root 8192 Apr 23 16:38 hello1

-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

【root@node1 tdbtest】# tdbbackup -v hello

restoring hello

【root@node1 tdbtest】# ll

total 24

-rw——- 1 root root 8192 Apr 23 17:33 hello

-rw——- 1 root root 8192 Apr 23 16:38 hello1

-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

看到文件大小一致了,现在对比md5值

【root@node1 tdbtest】# md5sum hello

c20b4f9b01f5715bbec8f950cf394f51 hello

【root@node1 tdbtest】# md5sum hello.bak

c20b4f9b01f5715bbec8f950cf394f51 hello.bak

【root@node1 tdbtest】# tdbdump hello |md5sum

88be32a888d3cd63132e09a0de8d69de –

【root@node1 tdbtest】# tdbdump hello.bak |md5sum

88be32a888d3cd63132//代码效果参考:http://www.zidongmutanji.com/bxxx/533118.html

e09a0de8d69de –

看到MD5值与之前备份之前一致了。查看数据

【root@node1 tdbtest】# tdbdump hello

{

key(5) = “name1”

data(4) = “lisi”

}

{

key(5) = “name2”

data(6) = “wangwu”

}

{

key(5) = “name3”

data(4) = “test”

}

相关文章
|
5月前
|
存储 NoSQL Shell
经验大分享:TDB文件介绍
经验大分享:TDB文件介绍
80 0
|
6月前
|
机器学习/深度学习 算法 前端开发
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
|
Arthas 消息中间件 人工智能
为什么很多人工作3年,却只有1年经验?
同样是在软件开发行业工作 3 年,为什么有些人经验丰富,可以独当一面,而有些人却还和工作一年的人差不多?作者给出了自己的答案。
48337 16
|
5月前
|
算法 Java 大数据
为什么很多人工作 3 年 却只有 1 年 经验?
为什么很多人工作 3 年 却只有 1 年 经验?
64 0
|
11月前
|
设计模式 运维 分布式计算
工作经验小结(2023.11.21)
工作经验小结(2023.11.21)
175 1
|
Java 程序员 开发工具
程序员的职业发展路径,广大学生可以重点关注
@[TOC](目录) 程序员的职业发展路径可以分为以下几个阶段,每个阶段都有不同的职位和技能要求: # 1. 初级程序员 职位:软件开发工程师、初级程序员、实习生等。 技能要求: - 掌握至少一种编程语言,如 Java、Python、C++ 等; - 熟悉基础的数据结构和算法; - 熟悉常用的开发工具,如 IDE、版本控制工具等; - 具备基本的代码编写和调试能力; - 了解软件开发流程,如需求分析、设计、开发、测试等。 # 2. 中级程序员 职位:软件开发工程师、中级程序员、技术支持等。 技能要求: - 掌握至少一种高级编程语言和框架,如 Django、React、S
242 0
|
前端开发 测试技术 程序员
程序员成长第八篇:做好测试工作
程序员成长第八篇:做好测试工作
217 0
|
前端开发 JavaScript 算法
前端:需要掌握哪些技能才能找到满意的工作?
前端:需要掌握哪些技能才能找到满意的工作?
239 0
|
机器学习/深度学习 数据可视化 数据挖掘