在redis.io站点中,它声明RDB不如AOF持久。这是否意味着存在一些数据库损坏的可能性,如果在保存操作中丢失电源,则会导致完全数据丢失吗?
发布于 2014-05-31 14:36:46
如果基础数据存储有问题,RDB文件可能会损坏。Redis包括一个实用工具redis- check -dump来验证一个文件,您可以使用它来检查新编写的转储文件的一致性。
如果RDB在启动时损坏,Redis将无法启动并报告一个有点神秘的错误。有一个拉请求:
https://github.com/antirez/redis/pull/1744
使检查程序自动运行,但尚未合并(尚未)。
转储文件是在后台线程中编写的,这意味着它不能包含键空间的100%的最新副本。要做到这一点,您需要使用AOF文件,并在每次写入后将其设置为同步(这对性能有影响)。
Redis的体系结构允许您构建许多不同的解决方案。您可以使用“从不”fsync在主服务器上打开AOF,然后创建两个从服务器,其中一个服务器每10分钟只创建RDB文件,另一个服务器使用AOF和“始终”或“每秒钟”fsync。这将使您在主服务器上内置冗余,只要磁盘从未失败,但如果有,您可以从从服务器获取AOF文件,并使用它将主服务器带回。如果失败,您可以转到RDB从属程序,但在这种情况下,您可能会丢失从最后10分钟转储以来编写的数据。
这种灵活性是Redis之所以如此强大的原因之一:您可以根据存储的数据选择要使用的冗余级别。
或者,您可以使用托管的Redis服务,让他们担心细节。
发布于 2014-01-23 15:06:19
.rdb本身“不能”损坏,因为转储首先保存到tmp文件,然后重命名为转储。当然,当重命名时可能会出错。所以有一个很小的机会,但不太可能。
https://serverfault.com/questions/569370
复制相似问题