Write by lyc at 2019-8-12
几种redis数据导出导入方式

1.redis db 迁移脚本

同实例或异实例下db copy 到 db

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat redis_mv.sh 
#!/bin/sh
REDIS_CLI="/usr/local/redis/bin/redis-cli"
SOU_IP="10.19.xx.xx"
SOU_PORT=6379
SOU_DB=1
DST_IP="10.19.xx.xx"
DST_PORT=6379
DST_DB=0


${REDIS_CLI} -h ${SOU_IP} -p ${SOU_PORT} -n ${SOU_DB} keys "*" | while read key
do
${REDIS_CLI} -h ${SOU_IP} -p ${SOU_PORT} -n ${SOU_DB} --raw dump $key | perl -pe 'chomp if eof' | ${REDIS_CLI} -h ${DST_IP} -p ${DST_PORT} -n ${DST_DB} -x restore $key 0
if [ $? -eq 0 ];then
echo "[info]migrate key $key from ${SOU_IP}:${SOU_PORT} db${SOU_DB} -> ${DST_IP}:${DST_PORT} db${DST_DB} is ok"
else
echo "[err]migrate key $key from ${SOU_IP}:${SOU_PORT} db${SOU_DB} -> ${DST_IP}:${DST_PORT} db${DST_DB} is false"
fi
done

2.运行

1
sh redis_mv.sh > /data/1.log

3.问题

  • 超大key会复制失败,这个迁移脚本无法解决该问题
  • 只能通过找到迁移失败的key, move key db把失败的key移过去
1
2
3
4
5
# 找到失败的key
$ grep -i "err" /data/1.log

# 登陆redis,单独把失败的key移动到目标db
redis-cli > move key 0