验证快照文件和AOF文件
无论是快照持久化还是AOF持久化,都提供了在遇到系统故障时进行数据恢复的工作。Redis提供了两个命令行程序redis-check-aof 和redis-check-dump,他们可以在系统故障发生之后,检查AOF文件和快照文件的状态,并在有需要的情况下对文件进行修复。在不给定任何参数的情况下运行这两个程序,就可以看见他们的基本使用方法:
$ redis-check-aof
Usage:redis-check-of [--fix] <file.aof>
$redis-check-dump
Usage:redis-check-dump <dump.rdb>
$
如果用户在运行redis-check-aof程序时给定了--fix参数,那么程序将对AOF文件进行修复。程序修复AOF文件的方法非常简单,它会扫描给定的AOF文件,寻找不正确或者不完整的命令,当发现第一个出错命令的时候,程序会删除出错的命令以及位于出错命令之后的所有的命令,只保留那些位于出错命令之前的正确命令。在大多数情况下,被删除的都是AOF文件末尾的不完整的写命令。
遗憾的是,目前并没有方法可以修复出错的快照文件。尽管发现快照文件首个出现错误的地方是有可能的,但因为快照文件本身经过了压缩,而出现在快照文件中间的错误有可能会导致快照文件的剩余部分无法被读取。因此,用户最好为重要的快照文件保留多个备份,并在进行数据恢复时,通过计算快照文件的sha1散列值和SHA256散列值来对内容进行验证。(当今的Linux平台和Unix平台都包含类似sha1sum和sha256sum这样的用于生成和验证散列值的命令行程序。)
校验和(checksum)与散列值(hash)
从2.6版本开始,Redis会在快照文件中包含快照文件自身的crc64校验和。crc校验和对于发现典型的网络传输错误和硬盘损伤非常有帮助,而sha加密散列值则更擅长发现文件中的任意错误。简单的来说,用户可以翻转文件中任意的数量的二进制位,然后通过翻转文件最后64个二进制位的一个子集来产生于原文件相同的crc64校验和。而对于sha1和sha256,目前还没有任何已知方法可以做到这一点。
在了解了如何验证持久化文件是否完好无损,并且在有需要时对其进行修复之后,我们接下来要考虑的就是如何更换出现故障的Redis服务器。