web-dev-qa-db-ja.com

別のマシンからコピーされたスナップショット(rdbファイル)からredisデータを回復する方法は?

Redisスナップショットを転送しました(dump.rdbファイル)scpを使用してリモートサーバーに接続します。このリモートでredisサーバーを実行し、dump.rdbファイル。どうやってやるの?

57
hupantingxue

特別なことは何もありません。新しいマシンに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サーバーは通常の方法で起動できます。

57
Didier Spezia

appendonlyフラグがnoに設定されているデータベースでは、次のことができます。

  1. Redisを停止します(redisが終了すると現在のrdbファイルが上書きされるため)。
  2. バックアップrdbファイルをredis作業ディレクトリにコピーします(これはredis構成のdirオプションです)。また、バックアップファイル名がdbfilename configオプションと一致することを確認してください。
  3. Redisを開始します。

一方、追加のみのデータベースにrdbファイルを復元する必要がある場合は、次の行に沿って何かを行う必要があります。

  1. Redisを停止します(redisが終了すると現在のrdbファイルが上書きされるため)。
  2. バックアップRDBファイルをredis作業ディレクトリにコピーします(これはredis設定のdirオプションです)。また、バックアップファイル名がdbfilename configオプションと一致することを確認してください。
  3. Redis config appendonlyフラグをnoに変更します(それ以外の場合、redisは起動時にrdbファイルを無視します)。
  4. Redisを開始します。
  5. 実行redis-cli BGREWRITEAOF新しいappendonlyファイルを作成します。
  6. Redis config appendonlyフラグをyesに復元します。

具体的には、これはredis configファイルのコメントからの関連ドキュメントです:

# 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. 
46
Robert Kajic

Redis 2.6以降を実行すると仮定すると、Redisスナップショットのファイル名はdump.rdb、およびディレクトリ/home/user/dbs、次のコマンドはトリックを実行します。

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

公式ドキュメントの関連セクション: コマンドライン経由で引数を渡す

12
tzabal

または、次のことができます。

  1. Redisサーバー/インスタンスを停止します(例:service redis6379 stop
  2. Dump.rdbファイルを正しい場所にコピーします(例:cp /path/to/dump-6379.rdb /var/lib/redis/dump-6379.rdb。適切な権限を付与します(user:groupはredis:redisおよびモード644でなければなりません)
  3. Redisサーバー/インスタンスを起動します(例:service redis6379 start

Redisはファイルを正しい場所にコピーする前にredisサーバーを停止することが重要です。Redisは終了する前にスナップショットを保存するため、ファイルが置き換えられます。

また、既存のdump.rdbファイルを最初にバックアップすることもできます。

9
Ruxandra T.

次のように、2番目のサーバーでredisを開始します。

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

redisが起動すると、namefile pathを探すため、rdbファイルが見つかります構成ファイルredis.conf)で、redisサーバーの起動時に指定します。上記。

ファイル名とパスを指定するには、redis.confファイルテンプレート(redisソースのルートディレクトリにある)で2行を編集します。サーバーの起動時に指定したディレクトリの場所に、改訂版をredis.confとして保存します。

必要な設定は、ソースの最上位ディレクトリのredis.confテンプレートの行127にあります。 および137(redisバージョン2.6.9)。

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory
dir ./

ご覧のとおり、両方の設定にデフォルトが用意されています

したがって、これらの2行の最初(127)を変更してrdbファイルを識別し、2行目(137)でスナップショットrdbファイルの実際のファイルパスをデフォルトの "./"に置き換えます。 redis.confを変更とともに保存し、この新しいconfファイルでredisを渡し始めます。

5
doug

appendonly noを設定してみてください。私の場合、*。aofファイルは空(0バイト)だったため、appendonly = noを設定してから、dump.rdbをロードする必要があります。

3
toontong

ここでは言及されなかった小さな詳細を追加したいと思います。設定ファイルは使用せず、代わりにコマンドラインですべてを指定します。

redis-serverの起動時にmydump.rdbファイルとappendonly.aofファイルの両方が指定されている場合、appendonly.aofファイルが追加され、appendonly.aofのデータがロードされます。例えば:

redis-server --dbfilename mydump001.rdb --dir /data --appendonly yes

上記の開始呼び出しは、/dirロケーションを使用して、mydump001.rdbまたはappendonly.aofファイルの存在を検出します。この場合、redis-serverappendonly.aofからコンテンツをロードします。 appendonly.aofが存在しない場合、空の/data/appendonly.aofが作成され、redis-serverは空になります。

特定のダンプファイルをロードする場合は、次の操作を実行できます。

redis-server --dbfilename mydump001.rdb --dir /data

私はこの答えを追加しました。どちらがどれなのかは明らかではありません。 2つのバックアップファイルが存在する場合、これはしばしば言及されません。

1
typelogic