这还真是个大活,耗费了整整一天的时间。
究其原因根本就是无论AWS托管的Valkey还是社区的Redis.io,都是被魔改过的阉割版,真是无语他妈给无语开门,无语到家了!
说一下详细的过程:
接到这个任务,首先想到的是同步软件redis-Gunyu
https://github.com/mgtv-tech/redis-GunYu
结果是失败,原因很奇葩,因为aws valkey是必须带tls连接的,Gunyu不支持,放弃。
然后找到了redis-shake
https://tair-opensource.github.io/RedisShake
结果还是失败,理由是不支持PSync,用了scan_reader也失败
然后就又想到了万能的ChatGPT和Google的Gemini,分别给了2个python程序,也是失败
原因是不支持Migrate命令,而且valkey是基于redis 7.2改的,而Redis.io是8.0,命令不兼容
走投无路之下想到了rdb-tools,先把valkey做个备份,放到S3桶里
1valeky-20250819-0001.rdb
2valeky-20250819-0002.rdb
3valeky-20250819-0003.rdb
4valeky-20250819-0004.rdb
5valeky-20250819-0005.rdb
6valeky-20250819-config.json
7
8cat valeky-20250819-config.json
9{
10 "valeky-20250819/valeky-20250819-0002.rdb" : {
11 "Slots" : "0-5496",
12 "rdbSize" : "5234516"
13 },
14 "valeky-20250819/valeky-20250819-0004.rdb" : {
15 "Slots" : "5497-8375",
16 "rdbSize" : "4340658"
17 },
18 "valeky-20250819/valeky-20250819-0003.rdb" : {
19 "Slots" : "10082-16383",
20 "rdbSize" : "5962581"
21 },
22 "valeky-20250819/valeky-20250819-0001.rdb" : {
23 "Slots" : "8376",
24 "rdbSize" : "2218"
25 },
26 "valeky-20250819/valeky-20250819-0005.rdb" : {
27 "Slots" : "8377-10081",
28 "rdbSize" : "1540505"
29 }
30}
看起来是5个rdb备份,每个文件对应redis不同的slots
用rdb来解析备份文件,结果失败,因为不认识valkey rdb的版本。
没办法了,又找到了这个软件
https://github.com/HDT3213/rdb
下载后,首先想处理成json文件,然后灌入到redis.io
1./rdb-linux-amd64 -c json -o 0001.json valeky-20250819-0001.rdb
失败,因为json文件灌入的时候redis.io又被阉割了,命令不支持
走投无路,走投无路,走投无路啊!!!欲哭无泪,欲哭无泪,欲哭无泪啊!!!
没办法了,用redis-shake把rdb文件逐个灌进去
1[rdb_reader]
2filepath = "/root/redis/rdbs/valeky-20250819-0001.rdb"
3
4[redis_writer]
5cluster = false
6address = "redis-22222.c1.ap-southeast-1-1.ec2.redns.redis-cloud.com:22222"
7username = "default"
8password = "ABCDEFG"
9tls = false
执行了5次,就可以了。
后续啊:可以先去下个rdt
https://github.com/leonchen83/redis-rdb-cli/
把5个rdb合成一个,然后再灌入。
1./rdt -m ../../valeky-20250819-0001.rdb ../../valeky-20250819-0002.rdb ../../valeky-20250819-0003.rdb ../../valeky-20250819-0004.rdb ../../valeky-20250819-0005.rdb -o all.rdb
真的是累死了。