redis上的FLUSHALL和FLUSHDB命令返回"unk命令"

Jon*_*ica 11 redis

要刷新redis,FLUSHALL将使用该命令.

使用Redis 2.6.16,当我在使用redis-cli时尝试FLUSHALL和FLUSHDB命令时,我收到了一个FLUSHALL错误.其他命令工作正常.

a)FLUSHDB命令出了什么问题?

b)解决方法是关闭redis,然后删除rdb文件?(我相信是这样)

更新:

不,我们从未解决过这个问题.

(唯一已知的解决方案是使用上面的步骤'b')

小智 35

可能是您的Redis配置已重命名某些命令以防止您的数据库被意外删除.

在redis.conf中查找以下行:

rename-command FLUSHDB ""
rename-command FLUSHALL ""
Run Code Online (Sandbox Code Playgroud)

  • 这是 Bitnami Redis kubernetes helm 图表中的默认设置,对于其他使用它并遇到此意外的人来说。通过修改“master/slave.disableCommands”值来撤消。 (9认同)

Cam*_*dro 22

Redis 官方 Helm 图表默认禁用FLUSHDBFLUSHALL命令。在这种情况下,它没有在任何redis.conf容器内部指定,因此您需要在您的 Redis YAML 中指定它:

master:
  disableCommands: []
Run Code Online (Sandbox Code Playgroud)

  • 我认为有一个小错字,redis-cli 附近的 * 是不需要的。命令应该是这样的:`echo 'KEYS *' | redis-cli | sed 's/^/DEL /' | sed 's/^/DEL /' | redis-cli` (3认同)
  • 请注意,它是在“values.yaml”文件中指定的 - 对于主服务器和从服务器 (2认同)
  • 最后我们没有启用命令,而是在 Bitnami 提供的 Redis 容器的 shell 中执行以下命令:`echo 'KEYS *' | redis-cli * | sed 's/^/DEL /' | sed 's/^/DEL /' | redis-cli` (2认同)

sar*_*ole 6

我正在使用 Helm,并且不想重新安装它,因此我通过修改 Helm 生成的 configmap 以包含配置来解决这个问题。

CONFIGMAP=<<value of common.names.fullname>>-configuration
kubectl edit cm $CONFIGMAP
Run Code Online (Sandbox Code Playgroud)

您应该看到类似以下内容:

  master.conf: |-
    dir /data
    # User-supplied master configuration:
    rename-command FLUSHDB ""
    rename-command FLUSHALL ""
    # End of master configuration
  redis.conf: |-
    # User-supplied common configuration:
    # Enable AOF https://redis.io/topics/persistence#append-only-file
    appendonly yes
    # Disable RDB persistence, AOF persistence already enabled.
    save ""
    # End of common configuration
  replica.conf: |-
    dir /data
    slave-read-only yes
    # User-supplied replica configuration:
    rename-command FLUSHDB ""
    rename-command FLUSHALL ""
    # End of replica configuration
Run Code Online (Sandbox Code Playgroud)

删除以开头的行,rename-command使其看起来更像这样:

  master.conf: |-
    dir /data
    # User-supplied master configuration:
    # End of master configuration
  redis.conf: |-
    # User-supplied common configuration:
    # Enable AOF https://redis.io/topics/persistence#append-only-file
    appendonly yes
    # Disable RDB persistence, AOF persistence already enabled.
    save ""
    # End of common configuration
  replica.conf: |-
    dir /data
    slave-read-only yes
    # User-supplied replica configuration:
    # End of replica configuration
Run Code Online (Sandbox Code Playgroud)

重新启动 Redis Pod

kubectl delete pods $(kubectl get pods | grep redis | awk {'print $1'})
Run Code Online (Sandbox Code Playgroud)

现在执行到 master pod 并刷新所有

kubectl exec redis-master-0 -- redis-cli FLUSHALL
OK
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想再次使用 FLUSHALL 或 FLUSHDB,则重新安装 Helm 版本时必须再次执行此操作。

更新:虽然这有效,但当您重新安装 helm 版本时,pod 将进入 crashloopbackoff,因为它们会在历史记录中看到您运行的命令不存在,因此您必须再次执行此操作才能获取 pod跑步。在这种情况下,最好采用 @camilo-sampedro 的答案。