【问题标题】:Load RDB file generated by Redis 4 into Redis 5将 Redis 4 生成的 RDB 文件加载到 Redis 5 中
【发布时间】:2019-12-14 10:59:05
【问题描述】:

我正在尝试将 Redis 4 生成的 RDB 文件加载到 Redis 5 中,但没有数据可见。

我只是将 RDB 文件复制到 Redis 5 期望的位置(我仔细检查了两次和三次检查它的位置是否正确),启动 Redis 5 并且它启动时没有错误:

27066:C 06 Aug 2019 20:22:34.304 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
27066:C 06 Aug 2019 20:22:34.304 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=27066, just started
27066:C 06 Aug 2019 20:22:34.304 # Configuration loaded
27067:M 06 Aug 2019 20:22:34.306 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 5.0.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 27067
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

27067:M 06 Aug 2019 20:22:34.307 # Server initialized
27067:M 06 Aug 2019 20:22:34.574 * DB loaded from disk: 0.268 seconds
27067:M 06 Aug 2019 20:22:34.574 * Ready to accept connections

0.26 seconds 实际上表明它确实加载(或尝试加载)RDB 文件。当没有 RDB 文件时,它会显示0.00 seconds

但是没有数据:

$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)

而且超级奇怪的是,即使我设置了一个键并调用save,Redis 4 中的 RDB 文件也没有改变:

127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> keys *
1) "foo"
127.0.0.1:6379> save
OK
(0.51s)
127.0.0.1:6379> exit

$ ls /var/redis/
total 27M
drwxr-xr-x  2 root root 4.0K Aug  6 20:32 .
drwxr-xr-x 14 root root 4.0K Aug  6 18:40 ..
-rw-r--r--  1 root root  27M Aug  6 20:32 redis.rdb

而当我重新启动 Redis 时,“foo”键还在,所以它必须保存在 RDB 文件的某个位置。

Redis 5 是否只是忽略 RDB 文件中由 Redis 4 创建的所有数据,并附加它自己的数据? 如果是这样,为什么在启动过程中没有注意到它,例如“警告:找到以前版本的Redis的RDB文件,忽略...”

编辑

好的,我找到了以下语句here

RDB 文件是向前兼容的。较旧的转储文件格式将始终适用于较新版本的 Redis。

所以它应该工作。但为什么不呢?

【问题讨论】:

  • 您提到您三次检查了文件redis.rdb的位置,但默认的redis备份文件是dump.rdb redis.io/topics/persistence#snapshotting
  • 是的,但我设置了dbfilename redis.rdb。 :)
  • RDB 中的键是否可能不在数据库#0 中?尝试运行 INFO 并查看键空间统计信息。
  • @ItamarHaber 是的!就是这样!令人难以置信的是我错过了......请添加一个我可以接受的答案! :)
  • @ManuelMeurer 这是一个幸运的猜测:P

标签: redis


【解决方案1】:

您提供的所有信息都表明 RDB 确实已加载。

但是。根据您的数据,密钥可能存储在不同的逻辑数据库中,KEYS * 仅在默认数据库 (0) 上运行。相反,请尝试执行INFO 命令并检查“密钥空间”部分以查看您的密钥是否存储在不同的逻辑数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多