77

我将我的 redis 快照(dump.rdb文件)传输scp到远程服务器。我需要在这个远程服务器上运行一个 redis 服务器并从dump.rdb文件中恢复数据。我怎样才能做到这一点?

4

9 回答 9

68

没有什么特别的事情要做。只需在新机器上安装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服务器了。

于 2013-01-24T17:16:25.450 回答
64

对于appendonly标志设置为 的数据库no,您可以执行以下操作:

  1. 停止 redis(因为 redis 退出时会覆盖当前的 rdb 文件)。
  2. 将您的备份 rdb 文件复制到 redis 工作目录(这是dir您的 redis 配置中的选项)。还要确保您的备份文件名与dbfilename配置选项匹配。
  3. 启动redis。

另一方面,如果您需要将 rdb 文件恢复到仅附加数据库,则应执行以下操作:

  1. 停止 redis(因为 redis 退出时会覆盖当前的 rdb 文件)。
  2. 将您的备份 rdb 文件复制到 redis 工作目录(这是dir您的 redis 配置中的选项)。还要确保您的备份文件名与dbfilename配置选项匹配。
  3. 将 redis 配置appendonly标志更改为no(否则 redis 将在启动时忽略您的 rdb 文件)。
  4. 启动redis。
  5. 运行redis-cli BGREWRITEAOF以创建一个新的 appendonly 文件。
  6. 将 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. 
于 2014-04-23T02:52:34.513 回答
24

假设您运行 Redis 2.6 或更高版本,您的 Redis 快照文件名为dump.rdb,并且它存在于 directory/home/user/dbs中,则以下命令可以解决问题:

redis-server --dbfilename dump.rdb --dir /home/user/dbs

官方文档中的相关部分:通过命令行传递参数

于 2017-07-27T10:04:06.487 回答
14

或者您可以:

  1. 停止你的 redis 服务器/实例,例如, service redis6379 stop
  2. 将 dump.rdb 文件复制到正确的位置,例如cp /path/to/dump-6379.rdb /var/lib/redis/dump-6379.rdb. 给它正确的权限(用户:组应该是redis:redis和模式644)
  3. 启动您的 redis 服务器/实例,例如,service redis6379 start

在将文件复制到正确位置之前停止 redis 服务器很重要,因为 Redis 在终止之前会保存快照,因此它将替换您的文件。

此外,您可能需要先备份现有的 dump.rdb 文件。

于 2013-12-13T11:06:32.083 回答
5

在第二台服务器上启动redis ,如下所示:

$ > redis-server /path/to/my/redis/configuration/file/redis.conf

当 redis 启动时,它会找到您的rdb文件,因为它会在您启动 redis 服务器时提供的配置文件( redis.conf ) 中查找名称文件路径,如上所述。

要提供文件名和路径,只需编辑redis.conf文件模板中的两行(在 redis 源的根目录中提供。将修改后的版本保存为 redis.conf 在您在启动服务器时提供的目录位置。

您将在源顶级目录的redis.conf模板中的第127137行(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 文件。

于 2013-01-26T05:27:07.470 回答
4

我想在这里添加一个没有被提及的小细节,我不会使用配置文件,而是在命令行中指定所有内容。

如果在启动时同时指定了 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 个备份文件的情况下,这通常不会被提及。

于 2018-01-16T04:57:47.427 回答
2

尝试设置 appendonly 没有。在我的情况下,*.aof 文件为空(0 字节),必须设置 appendonly=no 然后使其加载 dump.rdb

于 2015-12-08T01:16:32.337 回答
1

此解决方案适用于 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

如果这是一个集群,端口应该是主端口。

于 2021-11-18T15:09:47.733 回答
0

安装https://github.com/leonchen83/redis-rdb-cli

rmt -s ./your-dump.rdb -m redis://host:port -r
于 2022-01-24T09:30:49.930 回答