最近在工作中遇到一个需要对redis进行数据迁移的场景,经过学习和验证,找到两种有效的迁移方法,在此做一下记录。
1. 物理迁移
所谓的物理迁移,指的是在redis开启了持久化存储过后,我们可以通过复制dump.rdb文件的方式都redis进行数据迁移。具体实施方法如下:
● 在redis源端,找到正确的数据持久化存储文件dump.rdb
● 将dump.rdb复制到目标端的redis指定的持久化存储所在的路径
● 启动redis
如果redis是一主二从的,则先关闭从redis,然后关闭主redis,再把rdb文件传过去,然后重启主redis,最后重启从redis使数据同步。
2. 逻辑迁移
所谓的逻辑迁移,指的是通过第三方工具,例如本次使用的redis-dump和redis-load工具进行逻辑导入导出的方式进行数据迁移。
2.1. 安装redis-dump
redis-dump的安装较为复杂,centos系统可以参考以下安装方式进行安装:
安装redis-dump之前首先需要安装ruby:
yum install ruby rubygems ruby-devel -y
ruby安装完成后,尝试安装redis-dump:
gem install redis-dump
如果提示ruby版本过低,那么则需要更新ruby版本,可以通过以下方式进行更新:
● 安装rvm
curl -L get.rvm.io | bash -s stable
安装完成会提示ruby的安装方法,显示如下:
[root@izuf63g0jydq42k49eo7zcz ~]# curl -L get.rvm.io | bash -s stable
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 194 100 194 0 0 197 0 --:--:-- --:--:-- --:--:-- 197
100 24173 100 24173 0 0 9655 0 0:00:02 0:00:02 --:--:-- 24014
Downloading https://github.com/rvm/rvm/archive/1.29.7.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.7/1.29.7.tar.gz.asc
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: Signature made Fri 04 Jan 2019 06:01:48 AM CST using RSA key ID 39499BDB
gpg: Can't check signature: No public key
GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.7.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.7/1.29.7.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
or if it fails:
command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
In case of further problems with validation please refer to https://rvm.io/rvm/security
通过提示的第一个命令进行安装:
$ gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.bashrc
$ source ~/.bash_profile
$ source /usr/local/rvm/scripts/rvm
$ rvm list known #列出版本
$ rvm install 3.0.0 #选择一个高版本的安装
$ rvm use 3.0.0 #使用安装的版本
$ ruby --version #查看版本
● 安装redis-dump:
gem install redis-dump
2.2. 导入与导出
导出和导入命令使用较为灵活,也比较简单,具体可以通过--help命令查看详细说明,以下举一个简单的到处和导入例子。
2.2.1. 导出
# 导出全部数据
redis-dump -u redis://192.168.10.101:6380 -a Nq2_6cJqhbU8 >> redis.json
# 可以通过-d 指定数据库号的方式导出需要的数据库
redis-dump -u redis://192.168.10.101:6380 -a Nq2_6cJqhbU8 -d 0>> redis_0.json
2.2.2. 导入
cat redis.json | redis-load -u redis://192.168.10.101:6379 -a Nq2_6cJqhbU8