Nosql Redis—是否无法从禁用AOF的环境迁移到启用AOF的环境?
基本上,我的情况如下: 1) 我最初在没有AOF的情况下启动了Redis,并让它运行了数周 2) 我决定使用AOF,所以我重新启动Redis并在n+1周后打开AOF 3) 我决定搬到一个新的服务器上。所以我安全地关闭了当前的Redis进程,并将RDB文件和AOF文件复制到我的新服务器上 4) 当我在启用AOF的新服务器中启动Redis时,Redis的默认行为是仅从AOF加载数据这意味着前n周的数据丢失。 当然,有一个显而易见的解决方案,就是在没有AOF的情况下启动Redis,以便从RDB加载数据,然后在运行时打开AOF 但这几乎意味着,如果您的AOF被关闭了一段时间,就无法使用AOF,并且只有在您从第一天开始就一直在使用AOF时,才能使用AOF。 这种理解正确吗?如果是这样的话,对于任何想要迁移到支持AOF的环境的人来说,这听起来都是毫无用处的。一个没有迁移手段的系统听起来很蹩脚 我是不是遗漏了什么?有没有办法将您过去的数据包含到AOF文件中Nosql Redis—是否无法从禁用AOF的环境迁移到启用AOF的环境?,nosql,redis,Nosql,Redis,基本上,我的情况如下: 1) 我最初在没有AOF的情况下启动了Redis,并让它运行了数周 2) 我决定使用AOF,所以我重新启动Redis并在n+1周后打开AOF 3) 我决定搬到一个新的服务器上。所以我安全地关闭了当前的Redis进程,并将RDB文件和AOF文件复制到我的新服务器上 4) 当我在启用AOF的新服务器中启动Redis时,Redis的默认行为是仅从AOF加载数据这意味着前n周的数据丢失。 当然,有一个显而易见的解决方案,就是在没有AOF的情况下启动Redis,以便从RDB加载数据
我希望能得到一些帮助,因为这会影响我决定是否在我的环境中需要AOF。(这意味着我无法体验AOF的巨大好处…我想你误解了AOF的工作原理 AOF实际上是两种机制:
- 将所有写操作附加到AOF文件的重做日志机制
- 一种后台重写操作,可根据内存内容生成AOF文件
在您描述的情况下,您应该在AOF文件中获取所有数据。在任何情况下,redis的最佳实践是从不停止服务器并将文件复制到另一台服务器。最佳做法是在新服务器上作为当前服务器的从属服务器启动redis,并让redis执行所有同步 您可以将从属服务器配置为接受写操作,但到目前为止,您的所有客户端仍然只指向旧的主服务器 然后,当所有内容都同步时,您将所有客户机指向从机。从机将具有与主机相同的数据,并且由于它接受写入,因此您的客户端可以根据需要设置新密钥 在这个阶段,旧服务器没有收到任何请求,所以现在可以动态地更改从属服务器,并说它是无从属服务器。这样,它将停止与主机进行同步通信。如果您动态地更改它,请不要忘记将配置文件持久保存到磁盘 经过这一步,你的老主人完全孤立了。没有客户端与它对话,也没有从机正在同步。你可以停下来 看到了吗?您没有停机时间,也没有手动处理文件:)
无论如何,你应该阅读迪迪埃的评论。关于AOF,他说得对非常感谢!正如你所说,我一直误解了后台重写操作。在重写操作被触发后,我的数据集都安全地在我的AOF中,并且我只能用一个AOF文件启动我的服务器。我以为
BGREWRITEAOF
只是现有AOF文件的一种压缩机制,但我错了。这一页也解释了这一点。我非常感谢你的解释:)为什么说为了解决日益增长的AOF问题,我们可以使用BGREWRITEAOF,它将通过删除冗余命令将AOF重写为尽可能短的。?似乎重写是基于原始AOF文件的。这是个错误吗?谢谢你的评论!我提出迁移示例是为了澄清我对AOF文件的理解,因此服务器迁移不是我主要关心的问题。但是你的迁移技巧听起来很有前途,也很简单;下次我必须移动服务器时,我肯定会使用它!谢谢!