Redis跨版本迁移执行MIGRATE命令报错:未知命令'MIGRATE'
问题原因及解决方法
你的核心错误是把MIGRATE命令发给了目标Redis实例,但MIGRATE是必须在源Redis实例上执行的命令——MIGRATE的逻辑是让源实例主动将指定键推送至目标实例,目标实例只需要接收数据,不需要执行这个命令。
具体错误分析
- 你的脚本中,
xargs把扫描到的键传给了目标实例的redis-cli,然后在目标实例上执行MIGRATE命令,这完全搞反了执行主体。 - 你单独执行命令时,也是在目标实例的cli中输入
MIGRATE,同样不符合命令的执行逻辑。
修正后的迁移脚本
source_host="你的源实例地址" source_port=6379 source_db=0 target_host="你的目标实例地址" target_port=6379 target_db=0 # 关键修改:在源实例的redis-cli中执行MIGRATE,参数指定目标实例地址 redis-cli -h $source_host -p $source_port -n $source_db --scan | xargs redis-cli -h $source_host -p $source_port -n $source_db MIGRATE $target_host $target_port "" $target_db 5000 KEYS
单独执行的正确方式
- 先连接到源Redis实例:
redis-cli -h 你的源实例地址 -p 6379 -n 0
- 在源实例的cli中执行MIGRATE命令(指定目标实例信息):
MIGRATE 你的目标实例地址 6379 "" 0 5000 KEYS "some_key"
额外注意事项
- 确保源实例网络能访问目标实例的6379端口(安全组、防火墙需放行)
- 如果目标实例有密码认证,需要在MIGRATE命令末尾加上
AUTH 目标实例密码参数 - Redis 6.0.5完全支持MIGRATE的KEYS批量迁移模式,无需担心版本兼容问题
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

