使用 redis:6.2.5-alpine3.14 重新启动 docker 容器后,它无法启动并出现错误:
[offset 55130] Internal error in RDB reading offset 0, function at rdb.c:411 -> Invalid LZF compressed string
清理Redis存储后一切正常:
# ls -la /redis/
total 68
drwxr-xr-x. 2 polkitd 1000 43 Oct 4 19:22 .
drw-r-----. 14 root root 179 Sep 8 19:51 ..
-rw-r--r--. 1 polkitd 1000 63907 Oct 4 19:13 dump.rdb
-rw-r--r--. 1 polkitd root 4096 Oct 4 19:22 .dump.rdb.swp
有人能解释一下这个问题的原因是什么吗?
答案1
这意味着 RDB 数据库已损坏。您应该停止容器并从备份中恢复文件。如果无法恢复,您可以重命名/移动它以获取损坏的备份,以防您想部分恢复它,然后启动 redis 容器。
如果这种情况经常发生,请检查澳大利亚联邦大学(仅附加文件)更适合您。您可以同时拥有 RDB 和 AOF。有关更多详细信息,请参阅揭秘 Redis 持久性。
要检查 RDB 文件的一致性,您可以使用:
redis-check-dump dump.rdb
看4.3.1 验证快照和仅附加文件更多细节。
如果你使用集群,你可以恢复其中一个节点和:
rladmin recover list # To see the list of all files to be recovered
rladmin recover all
rladmin recover db <database_id|name> # To recover only one DB
recover db only_configuration <db_name> # To recover only the DB config
rladmin status # To check which DBs were recovered
在集群中也可以恢复数据库和:
rladmin cluster recover ....
看:群集恢复文档