rmt_redis.c:6446 ERROR: Can't handle RDB format version redis-migrate-tool迁移工具报错

使用redis-migrate-tool的时候,有可能抛出以下错误

[2019-10-18 04:05:49.267] rmt_redis.c:6446 ERROR: Can't handle RDB format version 839003080
[2019-10-18 04:05:49.267] rmt_redis.c:6715 ERROR: Rdb file for node[127.0.0.1:7002@17002] parsed failed

原因

redis-migrate-tool迁移工具最高支持到rdb7版本,而你使用的redis生成rdb版本已经超过了7,例如,你是用的redis5.0

解决方式:

1.降低redis版本

2.修改redis-migrate-tool源码后重新编译

修改 rmt_redis.c 文件,将7改为10或更高的数

/* ========================== Redis RDB ============================ */
/* The current RDB version. When the format changes in a way that is no longer
 * backward compatible this number gets incremented. */
#define REDIS_RDB_VERSION 7   ###修改这行,将7改为10

注意

你需要保证你的redis中没有用到redis的高级特性。高级特性可以参考如下地址:

https://github.com/sripathikrishnan/redis-rdb-tools/blob/master/docs/RDB_Version_History.textile




为了防止地址发生变更,我将目前为止的列到下面

Redis RDB Version History

This document tracks the changes made to the dump file format over time.

Redis dump file is 100% backwards compatible. An older dump file format will always work with a newer version of Redis.

Version 9 - redis 5.0

The following additions have been made :

  1. New Streams data type
  2. The RDB can contain LRU or LFU of the keys
  3. The RDB can contain Module AUX fields

Version 8 - redis 4.0

The following additions have been made :

  1. New Modules data types
  2. Sorted sets store binary double values instead of strings

Version 7 - redis 3.2

The following additions have been made :

  1. New QuickList encoding
  2. New AUX fields with metadata
  3. New DBSIZE opcode

Version 6 - redis 2.8

In previous versions, ziplists used a variable length encoding scheme for integers.
Integers were stored in 16, 32 or 64 bits. In this version, this variable length
encoding system has been extended.

The following additions have been made :

  1. Integers 0 through 12, both inclusive, are now encoded as part of the entry header
  2. Numbers between -128 and 127, both inclusive, are stored in 1 byte
  3. Numbers between -2^23 and 2^23 -1, both inclusive, are stored in 3 bytes

Issue ID : https://github.com/antirez/redis/issues/469

To migrate to version 5 :

  1. In redis.conf, set list-max-ziplist-entries to 0
  2. Restart Redis Server, and issue the SAVE command
  3. Edit the dump.rdb file, and change the rdb version in the header to REDIS0005

Version 5 - redis 2.4

This version introduced an 8 byte checksum (CRC-32) at the end of the file. If checksum is disabled in redis.conf,
the last 8 bytes will be zeroes.

Issue ID : https://github.com/antirez/redis/issues/366

To migrate to version 4 -

  1. Delete the last 8 bytes of the file (i.e. after the byte 0xFF)
  2. Change the rdb version in the header to REDIS0004

Version 4

This version introduced a new encoding for hashmaps - “Hashmaps encoded as Zip Lists”. This version also deprecates
the Zipmap encoding that was used in previous versions.

“Hashmaps encoded as ziplists” has encoding type = 13. The value is parsed like a ziplist, and adjacent entries
in the list are considered key=value pairs in the hashmap.

Issue ID : https://github.com/antirez/redis/pull/285

To migrate to version 3 -

  1. In redis.conf, set hash-max-ziplist-entries to 0
  2. Restart Redis Server, and issue the SAVE command
  3. Edit the dump.rdb file, and change the rdb version in the header to REDIS0003

Version 3

This version introduced key expiry with millisecond precision.

Earlier versions stored key expiry in the format 0xFD <4 byte timestamp>. In version 3, key expiry is stored as
0xFC <8 byte timestamp>. Here, 0xFD and 0xFC are the opcodes to indicate key expiry in seconds and milliseconds respectively.

Issue ID : https://github.com/antirez/redis/issues/169

To migrate to version 2 -

  1. If you don’t use key expiry, simply change the version in the header to REDIS0002
  2. If you use key expiry, you can still migrate, but there will be some loss in expiry precision. Also, the migration is a bit involved.
  3. For each key=value pair in the dump file, you will have to convert 0xFC <8 byte timestamp> to 0xFD <4 byte timestamp>.
  4. After converting the timestamps, change the version in the header to REDIS0002

Version 2

This version introduced special encoding for small hashmaps, lists and sets.

Specifically, it introduced the following encoding types -

REDIS_RDB_TYPE_HASH_ZIPMAP = 9
REDIS_RDB_TYPE_LIST_ZIPLIST = 10
REDIS_RDB_TYPE_SET_INTSET = 11
REDIS_RDB_TYPE_ZSET_ZIPLIST = 12

Commit : https://github.com/antirez/redis/commit/6b52ad87c05ca2162a2d21f1f5b5329bf52a7678

To migrate to version 1 -

  1. In redis.conf, set the following properties to 0 hash-max-zipmap-entries, list-max-ziplist-entries, set-max-intset-entries, zset-max-ziplist-entries
  2. Restart Redis, and issue the SAVE command
  3. Edit the dump.rdb file, and change the rdb version in the header to REDIS0001
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iioSnail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值