我将我的 redis 快照(dump.rdb
文件)传输scp
到远程服务器。我需要在这个远程服务器上运行一个 redis 服务器并从dump.rdb
文件中恢复数据。我怎样才能做到这一点?
9 回答
没有什么特别的事情要做。只需在新机器上安装redis服务器,编辑配置文件即可。您只需更改以下参数以指向您刚刚复制的转储文件的位置。
# The filename where to dump the DB
dbfilename mydump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# Also the Append Only File will be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /data/mydirectory/
最后就可以正常启动redis服务器了。
对于appendonly
标志设置为 的数据库no
,您可以执行以下操作:
- 停止 redis(因为 redis 退出时会覆盖当前的 rdb 文件)。
- 将您的备份 rdb 文件复制到 redis 工作目录(这是
dir
您的 redis 配置中的选项)。还要确保您的备份文件名与dbfilename
配置选项匹配。 - 启动redis。
另一方面,如果您需要将 rdb 文件恢复到仅附加数据库,则应执行以下操作:
- 停止 redis(因为 redis 退出时会覆盖当前的 rdb 文件)。
- 将您的备份 rdb 文件复制到 redis 工作目录(这是
dir
您的 redis 配置中的选项)。还要确保您的备份文件名与dbfilename
配置选项匹配。 - 将 redis 配置
appendonly
标志更改为no
(否则 redis 将在启动时忽略您的 rdb 文件)。 - 启动redis。
- 运行
redis-cli BGREWRITEAOF
以创建一个新的 appendonly 文件。 - 将 redis 配置
appendonly
标志恢复为yes
.
具体来说,这是 redis 配置文件注释中的相关文档:
# Note that you can have both the async dumps and the append only file if you
# like (you have to comment the "save" statements above to disable the dumps).
# >> Still if append only mode is enabled Redis will load the data from the
# >> log file at startup ignoring the dump.rdb file.
假设您运行 Redis 2.6 或更高版本,您的 Redis 快照文件名为dump.rdb
,并且它存在于 directory/home/user/dbs
中,则以下命令可以解决问题:
redis-server --dbfilename dump.rdb --dir /home/user/dbs
官方文档中的相关部分:通过命令行传递参数
或者您可以:
- 停止你的 redis 服务器/实例,例如,
service redis6379 stop
- 将 dump.rdb 文件复制到正确的位置,例如
cp /path/to/dump-6379.rdb /var/lib/redis/dump-6379.rdb
. 给它正确的权限(用户:组应该是redis:redis和模式644) - 启动您的 redis 服务器/实例,例如,
service redis6379 start
在将文件复制到正确位置之前停止 redis 服务器很重要,因为 Redis 在终止之前会保存快照,因此它将替换您的文件。
此外,您可能需要先备份现有的 dump.rdb 文件。
在第二台服务器上启动redis ,如下所示:
$ > redis-server /path/to/my/redis/configuration/file/redis.conf
当 redis 启动时,它会找到您的rdb文件,因为它会在您启动 redis 服务器时提供的配置文件( redis.conf ) 中查找名称 和文件路径,如上所述。
要提供文件名和路径,只需编辑redis.conf文件模板中的两行(在 redis 源的根目录中提供。将修改后的版本保存为 redis.conf 在您在启动服务器时提供的目录位置。
您将在源顶级目录的redis.conf模板中的第127和137行(redis 版本 2.6.9)中找到所需的设置。
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory
dir ./
如您所见,两种设置都提供了默认值
所以只需更改这两行中的第一行 (127) 以识别您的 rdb 文件,并在第二行 (137) 中将默认的“./”替换为快照 rdb 文件的实际文件路径;保存redis.conf与您的更改,并启动 redis 传递这个新的 conf 文件。
我想在这里添加一个没有被提及的小细节,我不会使用配置文件,而是在命令行中指定所有内容。
如果在启动时同时指定了 mydump.rdb 和 appendonly.aof 文件redis-server
,它将是appendonly.aof
获胜的文件,以便加载来自 appendonly.aof 的数据。例如:
redis-server --dbfilename mydump001.rdb --dir /data --appendonly yes
上面的 start 调用将使用/dir
位置来查找文件的mydump001.rdb
存在appendonly.aof
。在这种情况下,redis-server
将从中加载内容appendonly.aof
。如果appendonly.aof
不存在,则会创建一个空/data/appendonly.aof
的,redis-server 将为空。
如果要加载特定的转储文件,可以执行以下操作:
redis-server --dbfilename mydump001.rdb --dir /data
我添加了这个答案,因为不清楚哪个是哪个。在存在 2 个备份文件的情况下,这通常不会被提及。
尝试设置 appendonly 没有。在我的情况下,*.aof 文件为空(0 字节),必须设置 appendonly=no 然后使其加载 dump.rdb
此解决方案适用于 redis-cluster,但也适用于 redis。
安装这个依赖https://github.com/sripathikrishnan/redis-rdb-tools
pip install rdbtools python-lzf
之后执行这个
rdb -c protocol /path/to/dump.rdb | redis-cli -h host -p port --pipe
如果这是一个集群,端口应该是主端口。
安装https://github.com/leonchen83/redis-rdb-cli
rmt -s ./your-dump.rdb -m redis://host:port -r