Windows Server 2016上Redis BGREWRITEAOF重命名临时AOF文件遇IO错误求助
Windows Server 2016 Redis BGREWRITEAOF重命名失败(I/O错误)问题解决
问题描述
在Windows Server 2016部署的Redis 3.2.100中,appendonly.aof文件持续增大耗尽磁盘空间,执行BGREWRITEAOF命令后重写成功,但最后重命名临时文件时出现I/O错误,报错日志如下:
[6268] 12 Sep 09:19:10.710 * Background AOF rewrite terminated with success [6268] 12 Sep 09:19:10.711 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB) [6268] 12 Sep 09:19:11.250 # Error trying to rename the temporary AOF file temp-rewriteaof-bg-6268.aof into appendonly.aof: Input/output error
当前Redis持久化状态:
loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1694506742 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok
原因分析
- 磁盘权限不足:Redis进程对AOF文件所在目录没有重写/修改文件的权限
- 文件被锁定:原
appendonly.aof被第三方进程(如杀毒软件、备份工具)占用,导致无法重命名 - 磁盘空间仍不足:重写生成的临时文件占用空间后,磁盘剩余空间不足以完成重命名操作(部分文件系统重命名需要少量额外空间)
- Windows平台兼容性:Redis 3.2.x在Windows上的文件操作存在小概率兼容性问题
解决方案
1. 检查磁盘空间与临时文件
- 打开命令行,进入AOF文件所在目录,执行
dir查看文件列表,确认temp-rewriteaof-bg-6268.aof的大小 - 检查磁盘剩余空间,确保至少有临时文件大小10%以上的剩余空间用于操作
2. 修复目录/文件权限
- 右键AOF文件所在文件夹 → 属性 → 安全
- 找到Redis服务运行的账户(默认是
Local System,若为自定义账户需对应选择) - 赋予该账户完全控制权限,点击应用后重新尝试
BGREWRITEAOF
3. 排查并释放文件锁定
- 打开资源监视器(通过任务管理器→性能→打开资源监视器)
- 在关联的句柄搜索框输入
appendonly.aof,查看是否有其他进程占用该文件 - 暂时关闭占用进程(如杀毒软件实时防护、备份程序),再执行重命名操作
4. 手动替换AOF文件(风险操作,需先停服务)
从持久化状态看,RDB已经完成最新数据备份(rdb_changes_since_last_save:0),可以手动处理:
- 停止Redis服务,避免数据不一致
- 备份原
appendonly.aof到其他磁盘 - 将
temp-rewriteaof-bg-6268.aof重命名为appendonly.aof - 启动Redis服务,查看日志确认加载正常
5. 优化持久化配置
- 当前AOF已关闭(
aof_enabled:0),可继续使用RDB持久化,定期执行BGSAVE确保数据安全 - 若需重新开启AOF,修改
redis.conf配置:
避免AOF文件无限制增长,同时确保磁盘有足够预留空间auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
内容的提问来源于stack exchange,提问作者SAIDI Belkacem
相关产品推荐
相关产品推荐

