redis 数据迁移
Redis数据迁移
先确认是否开启了持久化
redis有两种持久化方式:RDB 和 AOF
## 表示没有开启
appendonly no
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
RDB方式是一种快照式的持久化方法,将某一时刻的数据持久化到磁盘中。对服务器的性能消耗小
默认情况下,是快照rdb的持久化方式,将内存中的数据以快照的方式写入二进制文件中,默认的文件名是 dump.rdb
redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。
对于RDB方式,redis会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能
RDB是一个单一的紧凑文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集(适用于灾难恢复)。
AOF方式是将执行过的写指令记录下来,在数据恢复时按照丛前到后的顺序再将指令执行一遍。
前提
redis-cli --version
#或者
redis-cli INFO | grep redis_version
redis-server --version
开启持久化
127.0.0.1:6379> CONFIG GET appendonly
如果未开启
127.0.0.1:6379> config set appendonly yes
RDB 文件迁移
在原有的服务器使用命令,固化到文件中
127.0.0.1:6379> save
后台保存
127.0.0.1:6379> bgsave
查看安装目录
config get dir
然后拷贝 dump.rdb 文件到新的服务器上。
这样会生成新的文件,清空然后退出
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> exit
提示
另外需要注意文件的权限, 如果是哪个用户启动的需要检查当前的用户权限,权限为660
然后停掉服务,把旧服务器的文件拷贝过来然后覆盖,启动,查看
127.0.0.1:6379> info
127.0.0.1:6379> keys *
AOF 文件迁移
自建Redis实例已开启AOF功能。若实例未启用,请执行CONFIG SET appendonly yes命令开启AOF功能。
自建Redis实例已关闭混合持久化。若自建实例为Redis 5.0及以上版本,请执行CONFIG SET aof-use-rdb-preamble no命令关闭混合持久化。
连接自建Redis实例,手动触发AOF文件重写,保存最新的AOF文件。
redis-cli -h <自建Redis实例IP地址> -p <端口号> BGREWRITEAOF
示例:
redis-cli -h 127.0.0.1 -p 6379
BGREWRITEAOF
预计返回:Background append only file rewriting started
查看安装目录
config get dir
通过AOF文件将数据导入到新的数据库实例中,此处以AOF文件appendonly.aof为例
提示
注意是在安装目录下
redis-cli -h <云数据库 Tair(兼容 Redis)的IP地址> -p <端口号> -a <实例密码> --pipe < appendonly.aof
预计返回:
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 1
当看到类似上述信息,表示迁移成功。
如果自建Redis实例不需要一直开启AOF,可在导入完成后通过以下命令关闭。
redis-cli -h <自建Redis实例IP地址> -p <端口号> CONFIG SET appendonly no
在导入时产生报错:ERR Protocol error: too big inline request。
通过CONFIG GET aof-use-rdb-preamble命令,检查实例的aof-use-rdb-preamble参数是否为yes。若为yes,请通过CONFIG SET aof-use-rdb-preamble no命令将其置为no,重新生成AOF文件并重试。
config get aof-use-rdb-preamble
config set aof-use-rdb-preamble no