我的情况基本上是这样的:
1) 我最初在没有 AOF 的情况下启动了 Redis,并让它运行了 n 周。
2) 我决定要使用 AOF,因此我在 n+1 周后重新启动 Redis 并打开 AOF。
3) 我决定迁移到新服务器。因此,我安全关闭了当前的 Redis 进程,并将 RDB 文件和 AOF 文件复制到我的新服务器。
4) 当我在打开 AOF 的新服务器中启动 Redis 时,Redis 的默认行为是仅从 AOF 加载数据。 这意味着我前 n 周的数据丢失了。
当然,有一个明显的解决方案:在没有 AOF 的情况下启动 Redis,以便从 RDB 加载数据,然后在运行时打开 AOF。
但这几乎意味着如果您的 AOF 关闭了一段时间,就无法使用 AOF,并且只有从第一天起就连续使用 AOF,您才能使用 AOF .
这个理解正确吗?如果是这样,那么对于任何想要迁移到支持 AOF 的环境的人来说,这听起来毫无用处。一个没有迁移手段的系统听起来很蹩脚。
我在这里遗漏了什么吗?有没有办法将您过去的数据包含到 AOF 文件中?
我希望得到一些帮助,因为这会影响我在我的环境中是否需要 AOF 的决定。 (这意味着我无法体验到 AOF 的巨大好处...)
最佳答案
我认为您误解了 AOF 的工作原理。
AOF实际上是两种机制:
- 重做日志记录机制,将所有写入操作附加到 AOF 文件
- 后台重写操作,可以从内存内容生成 AOF 文件
后台重写操作由 Redis 定期触发,但您也可以使用 BGREWRITEAOF命令手动启动它。
现在,当通过“config set appendonly yes”命令动态打开 AOF 时,会自动触发重写操作,因此您可以确保所有现有数据都是生成的 AOF 文件的一部分。
你可以在aof.c文件中看到这段代码: https://github.com/antirez/redis/blob/unstable/src/aof.c#L192
在您描述的情况下,您应该在 AOF 文件中获取所有数据。
关于nosql - Redis - 没有办法从禁用 AOF 的环境迁移到启用 AOF 的环境吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250710/