Redis异常关闭导致AOF文件损坏
报错
Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>
这个错误的意思是Redis的AOF文件(数据文件)损坏了
解决办法比较简单,按照错误提示的命令./redis-check-aof --fix <filename>
修复一下AOF文件就行了
问题在于K8S环境下,Redis POD启动不起来,你没有办法进入Shell操作
解决办法
1)把Redis Deployment/StatefulSets 副本数变成 0
2)使用相同的 Redis 镜像另起一个“临时”的 Deployment:
- 挂载 Redis PVC 到容器 /data 目录下
- 在【高级选项】【入口/命令】
- 入口设置为 `/bin/sh`
- 打开【交互&TTY 终端(-i -t)】
- 如果是 yaml 部署则是添加 `stdin: true` 和 `tty: true` 还有 `command`,比如下面:
```yaml
...
spec:
...
template:
...
spec:
containers:
- command:
- /bin/sh
stdin: true
tty: true
# livenessProbe: ...
# readinessProbe: ...
3)进入容器,执行`./redis-check-aof --fix <filename>` 修复 AOF 文件。AOF 文件在 `/data` 目录下
4)修复完成后,删掉“临时”的Deployment
5)恢复Redis Deployment/StatefulSets 副本数
备注
这是我遇到的问题:
1、进入容器执行./redis-check-aof --fix <filename> 报错:大概意思是,没有此命令
解决办法:
which redis-check-aof
/opt/bitnami/redis/bin/redis-check-aof
然后执行:
/opt/bitnami/redis/bin/redis-check-aof --fix appendonly.aof