为什么我为同样的mongodump备份的tar获得不同的SHA-1校验和?

我正在尝试备份我的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 

我相信数据库没有更新:

 $ mongodump --quiet --db backup --out b1 $ mongodump --quiet --db backup --out b2 $ diff -r b1 b2 

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

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

  mongodump --quiet --db backup --out . sha1sum backup/* > backup/sha1.txt tar -cf backup.tar backup 

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

 $ diff -q backup/sha1.txt backup2/sha1.txt Files backup/sha1.txt and backup2/sha1.txt differ 

有了个别校验和,您也可以看到确切的文件更改:

 $ 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