Redis6.0.10升级迁移至Redis7.4.6(修复CVE‑2025‑49844,业务无需重启)

一、迁移背景

漏洞说明 :现有Redis 6.0.10存在 Redis LUA UAF 远程代码执行漏洞(CVE‑2025‑49844),需要升级到7.x版本进行漏洞修复。

本次目标版本:Redis‑7.4.6 生产环境旧Redis存有业务数据,要求迁移数据完成后,业务项目无需重启,实现平滑版本升级。

⚠️**重要前提**:本次采用主从复制迁移方案;操作前务必确认旧实例为Master主库。

二、环境说明

实例 版本 端口 角色
旧Redis 6.0.10 6379 Master(业务正在使用)
新Redis 7.4.6 6380(临时) Replica从库

三、操作步骤

3.1 确认旧Redis角色(确认是Master主库)

连接旧Redis客户端

复制代码
redis-cli -p 6379

输入认证密码,再查看复制信息

复制代码
127.0.0.1:6379> auth 你的密码
OK
127.0.0.1:6379> info replication

重点看输出:

复制代码
# Replication
role:master   # <font color="red">这里必须是master,才可以继续往下操作</font>
connected_slaves:0
......

如果roleslave,说明当前是从库,不能直接作为数据源,需要先切换主从再迁移

3.2 配置新版本Redis为从库(临时端口6380)

修改新版本redis.conf配置文件

  1. 修改监听端口,不能和旧主库端口冲突

    port 6380

  2. 增加主从同步配置,指向旧的6379主库,填写主库访问密码

    replicaof 127.0.0.1 6379
    masterauth "你的密码"

⚠️**注意:先启动7.4.6的Redis实例,此时新实例作为从库开始全量同步旧库数据** 启动新版本redis:

复制代码
redis-server ../etc/redis.conf

3.3 校验主从数据同步是否完整

校验思路:对比主库、从库各个db的key数量,数量完全一致代表同步完成

旧主库(6379)查看key统计
复制代码
redis-cli -p 6379
127.0.0.1:6379> auth 你的密码
OK
127.0.0.1:6379> INFO keyspace

示例输出:

复制代码
# Keyspace
db0:keys=86,expires=0,avg_ttl=0,subexpiry=0
db6:keys=14,expires=0,avg_ttl=0,subexpiry=0
新从库(6380)查看key统计
复制代码
redis-cli -p 6380
127.0.0.1:6380> auth 你的密码
OK
127.0.0.1:6380> INFO keyspace

示例输出:

复制代码
# Keyspace
db0:keys=86,expires=0,avg_ttl=0,subexpiry=0
db6:keys=14,expires=0,avg_ttl=0,subexpiry=0

判断标准:所有db下keys数量、过期key数量完全相等,代表数据同步完成;如果不一致,等待同步,禁止进行切换操作!

数据量大场景,全量同步需要时间,不要立刻切换。

四、业务切换(低峰期操作!)

⚠️**强烈建议选择业务访问量少的时间段执行切换,减少业务抖动风险**

4.1 修改新版本Redis配置,取消从库身份,切回业务端口6379

编辑7.4.6的redis.conf

  1. 修改端口为业务原端口

    port 6379

  2. 注释/删除主从复制两行配置

    #replicaof 127.0.0.1 6379
    #masterauth "你的密码"

4.2 停止旧版本Redis 6.0.10

复制代码
#查找旧redis进程PID
ps -ef|grep redis
#杀死旧redis进程
kill -9 旧redis的PID

⚠️确认kill的是旧6.0.10进程,不要误杀新版本7.4.6进程!等旧的redis进程停止后,在停止掉7.4.6,保证在停止6.0.10的时候,已经同步数据到7.4.6

4.3 启动新版本Redis7.4.6(端口6379对外提供服务)

进入新版本bin目录执行:

复制代码
redis-server ../etc/redis.conf

4.4 验证升级结果

连接6379端口,查看Redis版本

复制代码
redis-cli -p 6379
127.0.0.1:6379> auth 你的密码
OK
127.0.0.1:6379> INFO server

重点查看:

复制代码
# Server
redis_version:7.4.6  #<font color="red">显示7.4.6,代表版本升级成功</font>
redis_mode:standalone
......

再执行INFO keyspace核对key数量,确认数据还在。

最后一步:务必进行业务功能测试,验证业务读写Redis正常,才算迁移完整结束。

五、踩坑与注意事项

  1. 主从同步期间,旧主库不能停机,否则同步失败;
  2. 密码配置注意:masterauth密码需要带双引号,防止特殊字符解析异常;
  3. 端口冲突:新版本先使用临时端口,不要直接占用6379;
  4. 必须等keyspace key计数完全一致再切换,不要凭主观感觉认为同步完成
  5. 切换时先停旧redis,再启动新redis占用6379端口;
  6. 该方案实现业务无需重启,因为业务连接的还是6379端口,只是底层实例换成7.4.6;
  7. 操作前建议备份旧RDB/AOF数据,作为兜底回滚方案。

六、回滚思路(应急)

如果新版本出现异常:

  1. 停止7.4.6的6379实例;
  2. 重新启动旧版本Redis6.0.10监听6379端口,业务直接恢复;
  3. 排查迁移问题后再重新升级。
相关推荐
sdm0704273 小时前
Linux 中安装 Redis 5
redis
草莓熊Lotso4 小时前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
灯澜忆梦7 小时前
【Redis中间件】#2 | 基础数据类型语法
redis·后端
天天喝旺仔7 小时前
深入理解 JWT:从 Token 结构、签名机制到前后端鉴权实战
redis·安全·spring·微服务·https
一只小李郁vickie8 小时前
Redis 集群部署手册(3主3从)
运维·redis
Gl�ria19 小时前
Redis 高可用架构对比
数据库·redis
Zenova EdgeOS1 天前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
hanchenxing1 天前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
刃神太酷啦1 天前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存