为什么我会得到相同 mongodump 备份的 tar 的不同 SHA-1 校验和?

AoE*_*ter 3 tar checksum mongodb

我正在尝试备份我的 MongoDB 数据库并使用 SHA-1 校验和检查更改。问题是校验和不一样。

$ mongodump --quiet --db backup --out .
$ tar -cf backup1.tar backup
$ rm -r backup
$ sha1sum backup1.tar
d9519a5183fb797639af583738e292527c667420  backup1.tar

$ mongodump --quiet --db backup --out .
$ tar -cf backup2.tar backup
$ rm -r backup
$ sha1sum backup2.tar
f5c9e3e99e857a88052e9121a9eca61c40909c07  backup2.tar
Run Code Online (Sandbox Code Playgroud)

我确定数据库没有更新:

$ mongodump --quiet --db backup --out b1
$ mongodump --quiet --db backup --out b2
$ diff -r b1 b2
Run Code Online (Sandbox Code Playgroud)

Ste*_*nie 6

此问题并非特定于 MongoDB。与大多数文件存档程序一样,该tar格式存储有关存档文件的元数据,包括时间戳。如果您在两个不同的时间进行数据库备份,备份的内容将相同,但元数据将不同。

要检查实际数据文件中的更改,您应该在 tarring 之前计算校验和并将其包含在存档中:

 mongodump --quiet --db backup --out .
 sha1sum backup/* > backup/sha1.txt
 tar -cf backup.tar backup
Run Code Online (Sandbox Code Playgroud)

然后,您可以比较校验和文件以确定两个备份是否具有相同的数据:

$ diff -q backup/sha1.txt backup2/sha1.txt
Files backup/sha1.txt and backup2/sha1.txt differ
Run Code Online (Sandbox Code Playgroud)

通过单独的校验和,您还可以准确查看哪些文件发生了更改:

$ diff backup/sha1.txt backup2/sha1.txt
3,4c3,4
< b8e37a70f4dd7a8265a9e030edec1251224957dc  backup/bacon.bson
< 9fabdb53acb5d3261fa973325c52abdd5cade6ff  backup/bacon.metadata.json
---
> 96d6e9de8885e3f24a98148f8b8630b843882c4e  backup/bacon.bson
> a3cd2cfe5b088c2033eb5e292fcbf8b39be65727  backup/bacon.metadata.json
Run Code Online (Sandbox Code Playgroud)