对于 Redis 的 迁移我在网上看到了很多方法, 有使用 Redis-dump 的, 有使用 aof 导入方式, 有 rdb 文件迁移方式, 和 Redis-port.
由于我是将 Redis 从阿里云迁移到 AWS, 那么很多方法都被 pass 掉了, 最后我想使用的方法是 Redis-dump 和 Redis-port.
1. Redis-dump
Redis-dump 这款工具需要用到 Ruby, 而 CentOS 环境中的 yum 工具可以安装的 Ruby 版本最高是 2.0 的版本, 而当前 Redis 最新的
4.0
版本中需要用到的 Ruby>= 2.2 版本, 所以我们需要先安装 Ruby, 而安装 Ruby 有一个很好的命令行工具可以帮助我们, 这款工具就是 RVM,RVM 可以提供一个便捷的多版本 Ruby 环境的管理和切换.
- # 首先老规矩, 我们先到 tmp 下, 用来存放下载的安装文件
- cd /tmp
- mkdir rvm
- cd rvm
- # 开始安装 RVM
- gpg --keyserver hkp://keys.gnupg.NET --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
- curl -O https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer
- curl -O https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer.asc
- gpg --verify rvm-installer.asc
- bash rvm-installer stable
- source /etc/profile.d/rvm.sh
- View Code
1.1 安装 Ruby
- # 查看可以安装的 Ruby 版本
- rvm list known
- # 这里我们安装 2.4.1
- rvm install Ruby 2.4.1
1.2 安装 Redis-dump 工具
- # 移除 Gem 自带源
- Gem sources --remove https://rubygems.org/
- # 添加淘宝源
- Gem sources -a https://ruby.taobao.org/
- # 安装 Redis-dump
- Gem install Redis-dump -V
1.3 Redis-dump 导入导出
- # 导出命令
- Redis-dump -u 127.0.0.1:6379> test.JSON
- # 导出指定数据库数据
- Redis-dump -u 127.0.0.1:6379 -d 15> test.JSON
- # 如果 Redis 设有密码
- Redis-dump -u :password@127.0.0.1:6379> test.JSON
- # 导入命令
- < test.JSON Redis-load
- # 如果 Redis 设有密码
- < test.JSON Redis-load -u :password@127.0.0.1:6379
Redis-dump 工具我在使用的时候发现 dump 非常缓慢, 所以我最终还是使用了 Redis-port, 方便快捷.
2. Redis-port
1.1 Redis-port 的下载
Redis-port 的下载链接: 链接: https://pan.baidu.com/s/1HkGUSjuYVp8i9K5awkVd0A 提取码: 9grc
下载好后上传到我们的服务器.
1.2 阿里云 Redis 备份下载
我们需要从阿里云将我们的 Redis 的备份数据下载下来
我们在 Redis 的控制台的备份与恢复中, 找到我们最新的数据备份. 点击下载. 找到复制外网下载地址
拿到这个链接后, 我们在 Linux 上 直接用 wget 命令下载是会报 403 错误的. 原因是 url 里面包含特殊字符 比如 &, 导致 URL 被截断, 造成请求 URL 不完整, OSS 中不存在对应的文件信息, 所以访问被拒绝提示 403.
因此在 Linux 平台 URL 需要加上英文单引号才可以通过 wget 工具下载.
- wget -c 'http://rdslog-bj.oss-cn-beijing.aliyuncs.com/custinsxxxx/hostinsxxxx/mysql-bin.001150.tar?OSSAccessKeyId=cxxzsxxxx&Expires=9999999&Signature=QxxxxxEwD' -O MySQL-bin.001150.tar
- # -c 参数使 wget 工具在连接中断的时候尝试断点续传.
- # -O 参数将下载的结果保存为指定的文件 (建议使用 URL 中包含的文件名).
1.3 Redis-port 的使用
我们这里主要使用的 Redis-port 参数 restore
示例:
./Redis-port restore --input=x/dump.rdb --target=dst\_host:dst\_port --auth=dst\_password [--filterkey="str1|str2|str3"] [--targetdb=DB] [--rewrite] [--bigkeysize=SIZE] [--logfile=REDISPORT.LOG]
参数说明
src_host: 自建 Redis 域名 (或者 IP)
src_port: 自建 Redis 端口
src_password: 自建 Redis 密码
dst_host: 云数据库 Redis 域名
dst_port: 云数据库 Redis 端口
dst_password: 云数据库 Redis 密码
str1|str2|str3: 过滤具有 str1 或 str2 或 str3 的 key
DB: 将同步入云 Redis 的 DB
rewrite: 覆盖已经写入的 key
bigkeysize=SIZE: 当写入的 value 大于 SIZE 时, 走大 key 写入模式
当出现 restore: rdb done 时数据恢复完成.
Redis-port 还可以用来进行增量同步, 会在我的另外一篇文章写到.
注意事项:
Redis 阿里云迁移到 AWS 流程:
Redis bgsave 到 磁盘 ---》 阿里云备份 ---》下载备份 ----》 Redis-port 导入 ---》Redis 数据检查.
遇到的问题:
Redis-port 导入到 99% 后报错 parse rdb checksum error:
问题原因:
Redis 默认是 关闭了 checksum.Redis-port 工具进行导入的时候是需要效验的.
解决办法:
Redis 执行 config set rdbchecksum yes.
这样生成的 rdb 文件就是可以正常导入的.
注意: 阿里云的 Redis 默认是开启了 checksum 参数的, 但是具体不同地域的是否开通了, 建议提交工单询问.
Redis -dump 内容采用: 链接: https://www.jianshu.com/p/19b5e7b3bffb
Redis-port 内容借鉴阿里云文档 链接: https://help.aliyun.com/document_detail/66012.html
层楼终究误少年 自由早晚乱余生
来源: https://www.cnblogs.com/operationhome/p/9805476.html