本地 redis .rdb 文件上传到 阿里云 redis:
为这个问题,纠结了好久。之前还搜索了好多文章,还看的 唯品会的 redis 迁移工具。
其实阿里云文档,这些都有,我们需要耐下心来,好好研究,之前就是太浮躁了,瞎看,一看有点复杂,就不想看。
参考文档:
云数据库 Redis 版
1.公网链接 - https://help.aliyun.com/document_detail/43850.html
注意:我们从本地 PC 访问 阿里云的 Redis 数据库,默认是拒绝的,需要一些配置。需要仔细了解 『前提条件』。
前提条件:
『
若 Redis 实例属于专有网络(VPC),ECS 必须与 Redis 实例属于同一个 VPC。
若 Redis 实例属于经典网络,ECS 必须与 Redis 实例属于同一节点(地域)。
若 Redis 实例开启了 IP 白名单,必须将 ECS 的内网地址加入白名单列表内。
』
我们项目的 Redis 实例,是属于 "经典网络",在其他地域的 ESC 上尝试了半天,确实访问不了。
Redis 实例,只支持 ECS 访问,要想在公网上访问,文档也给出了途径:
『可以通过在 ECS 上配置端口映射或者端口转发实现』
好像是需要安装一个 rinetd 服务。
2.使用 redis-port 恢复数据 - https://help.aliyun.com/document_detail/90931.html
这篇文档,讲述的有2点:
1>从阿里云 redis 上,下载备份文件(阿里云redis,会根据我们的设置自动备份,我们就是下载这些已备份的文件)
2>将本地的 redis 文件,恢复到 阿里云redis
这个是我们需要的功能,但是并没有在这个文档提到,参考下面链接:
https://help.aliyun.com/document_detail/66012.html
1>下载 redis 备份
1)安装 openAPI
pip install aliyun-python-sdk-core #安装阿里云OpenAPI依赖包
// 这个需要安装 pip,自行搜索
2)下载工具包
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/73964/cn_zh/1536832169445/redis-rdb-auto-restore.zip
3)解压zip包,编辑 config.json 配置文件,配置我们的 阿里云的 AccesskeyID, AccesskeySecret,regionid。
unzip redis-rdb-auto-restore.zip
vim config.json
{
AccesskeyID: 'xxx',
AccesskeySecret: 'xxx',
regionid: 'cn-beijing',
}
4)执行脚本
python rdb_restore.py -c xxx -t xxx -p 6379 -a xxx -d 2018-09-20
注意:
如果一天之内有多个备份文件的话,务必加上 -b 参数,如需传入多个备份id请用逗号隔开,如:xxx,xxx,xxx
5)参数说明:
-c - 云数据库 redis 实例ID(--inistance_id)
-t - 云数据库 redis 域名(--target)
-p - 云数据库 redis 端口(--port)
-a - 云数据库 redis 密码(--auth)
-d - 备份的日期(--day)
-o - 备份到本地的路径以及文件名,默认路径是 '/root/'(--output)
-b - 具体的实例备份id,选填,对于一天有多个备份的时候选择具体备份,如果需要传入多个备份的话请用逗号隔开,如:xxx,xxxx,xxxx(--backup)
更多命令参考:python rdb_restore.py -h
2>上传本地 .rdb 文件到阿里云 redis
1)下载 redis-port
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/66008/cn_zh/1526545851725/redis-port
注意:
如果已经使用了 '第一步' 里,下载了备份工具包,里面已经有了 'redis-port' 了,我们就不用再次下载了
2)./redis-port restore --input=/xxx/xxx.rdb --target=xxx:6379 --auth=xxx
注意:
1.确保 redis-port 有执行权限。如果没有,执行:chmod o+x redis-port
2.非常关键!!!
测试了下 redis-port,并不会删除目前阿里云 redis 中的数据,会将我们本地的 .rdb 文件里的数据新增到里面去,所以我们需要根据自己的需求来操作。
如果完全使用本地的,阿里云redis不使用,直接点击 阿里云redis里的『清除数据』。
3)参数说明:
--input - 本地我们的 rdb 文件
--target - 云数据库 redis 域名:云数据库 redis 端口
--auth - 云数据库 redis 密码
--filterkey - 过滤指定的key。"str1|str2|str3":过滤包含 str1 或 str2 或 str3 的键。
--targetdb - 将要同步入云数据库 redis 的 DB
--rewrite - 覆盖已经写入的key
--bigkeysize - 当写入的 value 大于 SIZE 时,走大 key 写入模式
更多命令参考:./redis-port -h
安装 pip
参照官方安装:
https://pip.pypa.io/en/stable/installing/