redis数据迁移方案
一、持久化rdb文件迁移
1.持久化设置
- save 900 1 # 900秒(15分钟)内至少有1个key被改变
- save 300 10 # 300秒(5分钟)内至少有300个key被改变
- save 60 10000 # 60秒内至少有10000个key被改变
- dbfilename # 本地持久化数数据库文件名,默认值为dump.rdb
- dir # redis的工作目录,它会将转储文件存储到这个目录下,并生成一个附加文件
- appendonly yes #开启持久化
2.将dump.rdb拷贝到要迁移服务器的redis工作目录,保证迁移服务器的redis服务是关闭状态。
3.启动服务器redis服务,如果数据量大,时间稍长。
4.查看redis是否已导入(命令)
>INFO
二、第三方工具redis-dump
1.安装
- #yum -y install ruby rubygems ruby-devel ## 安装rubygems及相关包
- #gem sources -a https://ruby.taobao.org/ ## 加入淘宝源
https://ruby.taobao.org/ added to sources - #gem install redis-dump -V ##安装redis-dump
2.导出和导入数据
- #redis-dump -u 127.0.0.1:6379 >redis.json ## 导出
- #< redis.json redis-load ## 导入
3.查看INFO
注意:rubygems在Linux系统5.8不能使用
三、第三方工具crs-port(腾讯云)
1.下载
https://www.qcloud.com/doc/product/239/%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5
2.解压安装,可直接使用
- #tar -zxvf crs-port-64.tar.gz ## 解压
- 也可以手动写入文件中
#!/bin/bash export LC_ALL="zh_CN.UTF-8" date=`date +%Y%m%d` num=`ls /data/game/|wc -l` for ((i=1; i<=${num}; i++)) do gameid=`ls /data/game/|awk NR==$i` redisIp=`grep "redisIp" /data/game/${gameid}/conf/env.properties|awk -F= '{print $2}'` redispwd=`grep "redispwd" /data/game/${gameid}/conf/env.properties|awk -F= '{print $2}'` if [ ! -d /data/bakup/ ];then mkdir -p /data/bakup/ fi crs-port dump -n 16 -f ${redisIp}:6379 -P ${redispwd} -o /data/bakup/${gameid}.${date}.rdb if [ $? -eq 0 ];then echo -e "\033[35ms${gameid}备份完毕\033[0m" else echo -e "\033[33ms${gameid}备份失败,请检查\033[0m" exit 0 fi done crs-port dump -n 16 -f ${redisIp}:6379 -P ${redispwd} -o /data/bakup/${gameid}.${date}.rdb 参数说明 -n[并发数] 该值建议取源Redis服务的CPU总核数的2倍到4倍 -f 源Redis服务的IP和端口 -P 源Redis服务的密码,如无密码不指定该参数即可 -o 目标CRS实例的路径
3.可直接将rdb文件redis数据库
#crs-port restore -n 16 -i /data/dump.rdb -t localhost:6379 -A passwd 参数说明 -n[并发数] 该值建议取源Redis服务的CPU总核数的2倍到4倍 -i 指定导入文件所在路径 -t 要导入的目标CRS实例的IP和端口 -A 目标CRS实例的链接密码
4.crs注意事项
使用工具前需要清空目标CRS实例,否则会报错
5.其他功能——热迁移
#crs-port sync -n 16 -f 127.0.0.1:6379 -P pwd -t 10.10.1.100:6379 -A passwd 参数说明 -n[并发数] 该值建议取源Redis服务的CPU总核数的2倍到4倍 -f 源Redis服务的IP和端口 -P 源Redis服务的密码,如无密码不指定该参数即可 -t 要导入的目标CRS实例的IP和端口 -A 目标CRS实例的链接密码
注意:在导入的过程中如果有关于key的报错,请将此键删除,重新导入。