一、先把当前 aof 损坏彻底修好(极简操作)
- 停止 redis
systemctl stop redis
- 备份 + 修复
cd /var/lib/redis/appendonlydir cp appendonly.aof.1.incr.aof appendonly.aof.1.incr.aof.bak redis-check-aof --fix appendonly.aof.1.incr.aof
- 临时放行损坏尾段(适配你报错提示)编辑
redis.conf
aof-load-corrupt-tail-max-size 830
- 启动
systemctl start redis
二、永久杜绝 aof 损坏(关键配置,直接抄)
打开 redis.conf
1. 安全 aof 刷盘(防止断电崩文件)
# 核心:不要用always(太耗性能),也别用no(极易坏文件) appendfsync everysec # 断电/强制关机时,减少aof损坏概率 no-appendfsync-on-rewrite no
2. 开启 aof 自动碎片重写
避免 aof 文件无限膨胀、内部格式异常
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
3. 损坏容错配置(防止启动直接挂掉)
# 轻微损坏允许启动,截断错误尾段 aof-load-corrupt-tail-max-size 1024 aof-trim-corrupt-tail yes
4. 关闭混合 aof(redis7+ 最容易坏文件的元凶)
重点推荐,混合持久化最容易出现 aof 格式报错
aof-use-rdb-preamble no
三、搭配 rdb,双保险(数据不丢、不怕 aof 坏)
同时开 rdb+aof,aof 坏了可以用 rdb 恢复
# 定时快照 save 60 1000 dbfilename dump.rdb dir /var/lib/redis
四、运维硬性规范(避免再次炸裂)
- 禁止暴力杀进程不要
kill -9 redis,统一用:
systemctl stop redis # 或 redis-cli shutdown
- 服务器关机前先停 redis断电、重启前优雅下线,防止 aof 写入中断。
- 磁盘不要满盘运行磁盘 100% 占用,aof 写入截断直接损坏文件,定期监控磁盘。
- 定期巡检
# 检查aof是否异常 redis-check-aof /var/lib/redis/appendonlydir/*.aof
五、后续再崩一键自救命令
# 批量修复所有aof redis-check-aof --fix /var/lib/redis/appendonlydir/*aof # 查看redis运行+持久化状态 redis-cli info persistence
六、直接复制粘贴到redis.conf,全覆盖,防 aof 损坏 + 兼顾性能 + 双持久化兜底
# ========== 持久化核心配置(直接生效) ========== # 开启aof appendonly yes # aof文件独立目录,方便维护 appendonlydir /var/lib/redis/appendonlydir # 刷盘策略:折中最稳,不易坏文件 appendfsync everysec # 后台重写时不阻塞刷盘 no-appendfsync-on-rewrite no # 关闭混合aof(redis7+ 损坏高发根源,必关) aof-use-rdb-preamble no # aof自动重写,防止文件过大、碎片错乱 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 容忍轻微aof尾部损坏,启动不挂 aof-load-corrupt-tail-max-size 1024 aof-trim-corrupt-tail yes # ========== rdb 快照兜底(双保险) ========== save 60 10 save 300 100 save 3600 1000 # rdb文件目录&名称 dir /var/lib/redis dbfilename dump.rdb # 快照出错也允许启动 stop-writes-on-bgsave-error no # 压缩&校验,保证文件完整性 rdbcompression yes rdbchecksum yes
安全 aof 刷盘(防止断电崩文件),依次执行如下命令
止 redis---》 编辑配置文件,粘贴上面全部内容---》 重建 aof 目录权限(避免写入权限异常损坏文件)---》重启 redis
systemctl stop redis
vi /etc/redis/redis.conf
mkdir -p /var/lib/redis/appendonlydir chown -r redis:redis /var/lib/redis chmod 700 /var/lib/redis/appendonlydir
systemctl start redis systemctl status redis
七、关键说明
aof-use-rdb-preamble no关闭「rdb+aof 混合格式」,彻底杜绝你刚才那种 aof.incr 格式报错。appendfsync everysec比always性能强,比no安全,生产最优选择。- rdb+aof 双开aof 万一损坏,直接用 dump.rdb 恢复数据,不怕丢数据。
到此这篇关于redis避免以后aof再次损坏的预防措施的文章就介绍到这了,更多相关redis避免aof再次损坏内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论