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 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 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 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 88be32a888d3cd63132e09a0de8d69de  - 看到MD5值与之前备份之前一致了。查看数据 [root@node1 tdbtest]# tdbdump hello { key(5) = "name1" data(4) = "lisi" } { key(5) = "name2" data(6) = "wangwu" } { key(5) = "name3" data(4) = "test" }

posted on 2018-05-08 15:44  歪歪121  阅读(244)  评论(0)    收藏  举报