一、问题背景
我以前使用的linux虚拟机是32位,现在好多最新的软件只支持64位,所以弄了一个64位虚拟机。相对应的,我需要将原虚拟机上的redis数据转移到64位虚拟机中,这就涉及到在不同机器上的Redis导出导入数据。
经过查询资料,可以直接利用redis的备份功能或者选用redis-dump工具。
二、redis的备份功能
第一步、先redis-cli 进去后bgsave下数据将数据存储到磁盘对应文件dump.rdb中。如果是只存内存的请先做对应的存储设置(修改redis.conf中的save 等参数)
第二步、 ps -ef|grep redis 找到对应的进程,kill掉。
第三步、 找到dump.rdb 备份下并拷贝一份到要导入的redis机器
第四步、kill掉导入机器的对应redis端口,将原rdb文件移除(移除前请自行备份),将第三步导过来的文件替换掉对应的rdb文件。
第五步、启动对应的redis端口,便可以看到导入的新的数据了
拓展:备份redis数据时候也是同样的,先bgsave 然后再备份对应的文件
三、安装redis-dump工具
1、安装rubygems 以及相关包
yum install ruby rubygems ruby-devel
2、更换默认源,默认的源国内不能访问
//网上好多是.org,经查官网,域名已经更改为.com!!!!
gem sources -a http://gems.ruby-china.com/
3、安装redis-dump
gem install redis-dump -V
若执行上述命令报如下错误:redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2
解决办法是 先安装rvm,再把ruby版本提升至2.2.2以上:
(1)安装RVM
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
source /usr/local/rvm/scripts/rvm
(2)查看rvm库中已知的ruby版本
rvm list known
MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
(3)安装一个ruby版本
rvm install 2.3.3
(4)使用一个ruby版本
//设置为默认版本
rvm use 2.3.3 --default
查看ruby版本:ruby --version
卸载一个已知版本:rvm remove 2.0.0
(5)安装redis-dump
gem install redis-dump -V
4、测试redis-dump
[root@bogon ~] telnet 127.0.0.1 6379
Trying 127.0.0.1
Connected to 127.0.0.1.
Escape character is '^]'.
set test 11 //设置一个值
+OK
get test //取值
$2
11
二、使用redis-dump导出导入数据
(一)A机器导出数据
1、启动redis-server
./redis-server redis.conf
2、导出数据
redis-dump 127.0.0.1:6379 >test.json
(二)B机器导入数据
1、启动redis-server
./redis-server redis.conf
2、将test.json拷贝过来
3、导入数据
< test.json redis-load