我正在尝试备份我的 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
答案1
此问题并非 MongoDB 所特有。与大多数文件归档程序一样,该tar
格式存储关于存档文件的元数据包括时间戳。如果您在两个不同的时间进行数据库备份,则备份的内容将相同,但元数据却不同。
要检查实际数据文件中的更改,您应该在 tarring 之前计算校验和并将其包含在存档中:
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