Ubuntu14.04でRedisデータをバックアップおよび復元する方法
序章
Redisは、メモリ内のKey-Valueキャッシュおよびストア(つまり、データベース)であり、ディスクに永続化(永続的に保存)することもできます。 この記事では、Ubuntu14.04サーバーでRedisデータベースをバックアップする方法を説明します。
デフォルトでは、Redisデータはディスクに保存されます。 .rdb
ファイル。これは、Redisデータセットの特定の時点のスナップショットです。 スナップショットは指定された間隔で作成されるため、バックアップに最適です。
前提条件
このチュートリアルの手順を完了するには、次のものが必要です。
- Ubuntu14.04サーバー
- Redisをインストールします。 このRedisセットアップチュートリアルからマスターセットアップに従うことができます(ただし、マスタースレーブクラスターでも同様に機能します)
- Redisサーバーが実行されていることを確認してください
- 強く推奨されるRedisパスワードが設定されている場合は、それを手元に用意してください。 パスワードはRedis構成ファイルにあります-
/etc/redis/redis.conf
ステップ1—Redisデータディレクトリを見つける
Redisは、そのデータをサーバー上のディレクトリに保存します。これは、バックアップしたいものです。 まず、それがどこにあるかを知る必要があります。
Ubuntuおよびその他のLinuxディストリビューションでは、Redisデータベースディレクトリは /var/lib/redis
. ただし、継承したサーバーを管理していて、Redisデータの場所が変更された場合は、次のように入力してサーバーを見つけることができます。
- sudo locate *rdb
または、 redis-cli
促す。 これを行うには、次のように入力します。
- redis-cli
Redisサーバーが実行されていない場合、応答は次のようになります。
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
その場合は、Redisを起動し、次のコマンドを使用して再接続します。
- sudo service redis-server start
-
- redis-cli
シェルプロンプトは次のように変更されます。
127.0.0.1:6379>
Redisに接続している間、次の2つのコマンドはRedisに認証され、データディレクトリを取得します。
- auth insert-redis-password-here
-
- config get dir
最後のコマンドの出力は、Redisデータディレクトリになります。
1) "dir"
2) "/var/lib/redis"
Redisディレクトリをメモします。 表示されているディレクトリと異なる場合は、チュートリアル全体でこのディレクトリを使用してください。
ここでデータベースコマンドラインインターフェイスを終了できます。
- exit
これが正しいディレクトリであることを確認してください。
- ls /var/lib/redis
あなたは見るべきです dump.rdb
ファイル。 これがRedisデータです。 もしも appendonly
も有効になっている場合は、 appendonly.aof
または別の .aof
サーバーが受信したすべての書き込み操作のログを含むファイル。
これら2つのファイルの違いについては、Redisの永続性に関するこの投稿を参照してください。 基本的に、 .rdb
ファイルは現在のスナップショットであり、 .aof
ファイルはRedisの履歴を保持します。 どちらもバックアップする価値があります。
まずは .rdb
ファイルを作成し、両方のファイルの自動バックアップで終了します。
(オプション)ステップ2 —サンプルデータの追加
このセクションでは、Redisデータベースに保存するサンプルデータを作成できます。 サーバーにすでにデータがある場合は、既存のコンテンツをバックアップするだけです。
データベースのコマンドラインインターフェイスにログインします。
- redis-cli
認証する:
- auth insert-redis-password-here
サンプルデータを追加してみましょう。 あなたはの応答を得る必要があります OK
各ステップの後。
- SET shapes:triangles "3 sides"
-
- SET shapes:squares "4 sides"
データが追加されたことを確認してください。
- GET shapes:triangles
-
- GET shapes:squares
出力は以下に含まれています:
"3 sides"
"4 sides"
これらの変更をにコミットするには /var/lib/redis/dump.rdb
ファイル、それらを保存します:
- save
終了できます:
- exit
必要に応じて、ここでダンプファイルの内容を確認できます。 マシンフレンドリーな形式ではありますが、データが含まれている必要があります。
- sudo cat /var/lib/redis/dump.rdb
REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C
ステップ3—Redisデータのバックアップ
Redisデータの場所がわかったので、次にバックアップを作成します。 公式のRedisWebサイトから、次の引用があります。
Redisは、データベースの実行中にRDBファイルをコピーできるため、データのバックアップに非常に適しています。RDBは、作成後に変更されることはなく、作成中は一時的な名前を使用し、rename(2)のみを使用してアトミックに最終的な宛先に名前が変更されます。新しいスナップショットが完了したとき。
そのため、Redisサーバーの実行中にデータベースファイルをバックアップまたはコピーできます。 ホームフォルダの下のディレクトリにバックアップしていると仮定すると、そのバックアップの実行は次のように入力するのと同じくらい簡単です。
- sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001
Redisはここにコンテンツを定期的に保存します。つまり、上記のコマンドを実行するだけでは、最新のバックアップが保証されません。最初にデータを保存する必要があります。
ただし、潜在的に少量のデータ損失が許容できる場合は、この1つのファイルをバックアップするだけで機能します。
データベースの状態を保存する
Redisデータのより新しいコピーを取得するには、アクセスするのがより良いルートです。 redis-cli
、Redisコマンドライン。
手順1で説明したように認証します。
次に、 save
そのようなコマンド:
- save
出力は次のようになります。
OK
(1.08s)
データベースを終了します。
今、あなたは実行することができます cp
上記のコマンドを使用して、バックアップが完全に最新であることを確認してください。
ながら cp
コマンドはデータベースの1回限りのバックアップを提供します。最善の解決策は、プロセスを自動化するcronジョブを設定し、増分更新を実行し、必要に応じてデータを復元できるツールを使用することです。
ステップ4—rdiff-backupとCronを使用した自動更新の構成
このセクションでは、両方のデータファイルを含むRedisデータディレクトリ全体をバックアップする自動バックアップを構成します。
利用可能な自動バックアップツールがいくつかあります。 このチュートリアルでは、と呼ばれる新しい、ユーザーフレンドリーなツールを使用します rdiff-backup
.
rdiff-backup
コマンドラインバックアップツール。 おそらく rdiff-backup
サーバーにインストールされていないため、最初にインストールする必要があります。
- sudo apt-get install -y rdiff-backup
インストールされたので、Redisデータをホームディレクトリのフォルダにバックアップしてテストできます。 この例では、ホームディレクトリが /home/sammy
:
ターゲットディレクトリが存在しない場合は、スクリプトによって作成されることに注意してください。 つまり、自分で作成する必要はありません。
–preserve-numerical-ids を使用すると、ソースフォルダーと宛先フォルダーの所有権は同じになります。
- sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis
以下のような cp
以前のコマンドでは、これは1回限りのバックアップです。 変更されたのは、全体をバックアップしていることです /var/lib/redis
今ディレクトリを使用して、 rdiff-backup
.
次に、cronを使用してバックアップを自動化し、設定された時間にバックアップが実行されるようにします。 これを行うには、システムのcrontabを開きます。
- sudo crontab -e
(このサーバーで以前にcrontabを使用したことがない場合は、プロンプトでお気に入りのテキストエディタを選択してください。)
filekの下部に、以下に示すエントリを追加します。
0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
このCronエントリは、毎日深夜にRedisバックアップを実行します。 –no-file-statistics スイッチは、への書き込みを無効にします file_statistics
のファイル rdiff-backup-data
ディレクトリ、これは rdiff-backup
より速く実行し、少し少ないディスク容量を使用します。
または、このエントリを使用して、毎日のバックアップを作成することもできます。
- @daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
一般的なCronの詳細については、Cronに関するこのの記事をお読みください。
現状では、バックアップは1日1回行われるため、明日戻って最終テストを行うことができます。 または、バックアップの頻度を一時的に増やして、機能していることを確認することもできます。
ファイルはredisシステムユーザーが所有しているため、このコマンドを使用してファイルが配置されていることを確認できます。 (バックアップが実際にトリガーされるまで待つようにしてください):
- ls -l /home/sammy/redis
出力は次のようになります。
total 20
-rw-rw---- 1 redis redis 70 Sep 14 13:13 dump.rdb
drwx------ 3 root root 12288 Sep 14 13:49 rdiff-backup-data
-rw-r----- 1 redis redis 119 Sep 14 13:09 redis-staging-ao.aof
これで、Redisデータの毎日のバックアップが作成され、同じサーバーのホームディレクトリに保存されます。
ステップ5—バックアップからのRedisデータベースの復元
Redisデータベースをバックアップする方法を確認したので、この手順では、データベースを dump.rdb
バックアップファイル。
バックアップを復元するには、アクティブなRedisデータベースファイルを復元ファイルに置き換える必要があります。 これは潜在的に破壊的であるため、可能であれば新しいRedisサーバーに復元することをお勧めします。
より問題のある復元でライブデータベースを上書きしたくないでしょう。 ただし、現在のファイルを削除するのではなく名前を変更すると、同じサーバーに復元する場合でもリスクが最小限に抑えられます。これが、このチュートリアルで示す戦術です。
復元ファイルの内容を確認する
まず、内容を確認してください dump.rdb
ファイル。 必要なデータが含まれていることを確認してください。
ダンプファイルの内容を直接確認できますが、人間にわかりやすいフォーマットではなく、Redisに適したフォーマットを使用していることに注意してください。
- sudo cat /home/gilly/redis/dump.rdb
これは小さなデータベース用です。 出力は次のようになります。
REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?
最新のバックアップにデータがない場合は、復元を続行しないでください。 コンテンツがそこにある場合は、続行します。
オプション:データ損失のシミュレーション
バックアップから復元する理由となるデータ損失をシミュレートしてみましょう。
Redisにログインします。
- redis-cli
この一連のコマンドでは、Redisで承認し、 shapes:triangles
エントリ:
- auth insert-redis-password-here
-
- DEL shapes:triangles
次に、エントリが削除されたことを確認しましょう。
- GET shapes:triangles
出力は次のようになります。
(nil)
保存して終了:
- save
-
- exit
オプション:新しいRedisサーバーのセットアップ
ここで、新しいRedisサーバーに復元する場合は、新しいRedisサーバーが稼働していることを確認してください。
このチュートリアルでは、この RedisClusterチュートリアルのステップ1のみを実行しますが、より高度なセットアップが必要な場合は、記事全体を実行できます。
パスワードを追加してAOFを有効にするステップ2に従う場合は、復元プロセスでそのことを考慮してください。
を実行して、Redisが新しいサーバーで稼働していることを確認したら redis-benchmark -q -n 1000 -c 10 -P 5
、続行できます。
Redisの停止
Redisダンプファイルを置き換える前に、現在実行中のRedisのインスタンスを停止する必要があります。 Redisを停止すると、データベースはオフラインになります。
sudo service redis-server stop
出力は次のようになります。
Stopping redis-server: redis-server
実際に停止していることを確認してください。
sudo service redis-server status
redis-server is not running
次に、現在のデータベースファイルの名前を変更します。
現在のdump.rdbの名前を変更
Redisはその内容を dump.rdb
ファイル。 復元ファイルに道を譲るために、現在の名前を変更しましょう。
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old
復元できることに注意してください dump.rdb.old
現在のバージョンがバックアップファイルよりも優れていると判断した場合。
AOFが有効になっている場合は、オフにします
AOFは、Redisデータベースへのすべての書き込み操作を追跡します。 ただし、ポイントインタイムバックアップから復元しようとしているため、RedisにAOFファイルに保存されている操作を再作成させたくありません。
Redis Clusterチュートリアルの手順からRedisサーバーをセットアップすると、AOFが有効になります。
の内容を一覧表示することもできます /var/lib/redis/
ディレクトリ。 あなたが見たら .aof
そこにファイルがあり、AOFが有効になっています。
名前を変更しましょう .aof
一時的に邪魔にならないようにファイルします。 これにより、で終わるすべてのファイルの名前が変更されます .aof
したがって、複数のAOFファイルがある場合は、ファイルの名前を個別に変更する必要があり、次のコマンドを実行しないでください。
- sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old
Redis構成ファイルを編集して、AOFを一時的にオフにします。
- sudo nano /etc/redis/redis.conf
の中に AOF
セクション、を探します appendonly
ディレクティブとそれをから変更します yes
に no
. それはそれを無効にします:
appendonly no
dump.rdbファイルの復元
次に、復元ファイルを使用します。このファイルは、次の場所に保存する必要があります。 /home/sammy/redis/dump.rdb
このチュートリアルの前の手順に従った場合。
新しいサーバーに復元する場合は、今度はバックアップサーバーから新しいサーバーにファイルをアップロードします。
- scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb
これで、元のRedisサーバーまたは新しいサーバーである復元サーバーのを使用できます。 cp
ファイルをにコピーするには /var/lib/redis
フォルダ:
- sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis
(ファイルをにアップロードした場合 /home/sammy/dump.rdb
、コマンドを使用します sudo cp -p /home/sammy/dump.rdb /var/lib/redis
代わりにファイルをコピーします。)
または、使用する場合 rdiff-backup
、以下に示すコマンドを実行します。 これは、設定したフォルダから復元する場合にのみ機能することに注意してください rdiff-backup
元は。 と rdiff-backup
、宛先フォルダ内のファイルの名前を指定する必要があります。
- sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb
についての詳細 -r
オプションは、この記事の最後にあるプロジェクトのWebサイトで入手できます。
dump.rdbファイルの権限の設定
バックアップを作成したのと同じサーバーに復元する場合は、おそらくすでに正しいアクセス許可を持っています。
バックアップファイルを新しいサーバーにコピーした場合は、ファイルのアクセス許可を更新する必要があります。
の権限を見てみましょう dump.rdb
のファイル /var/lib/redis/
ディレクトリ。
- ls -la /var/lib/redis/
このようなものが表示された場合:
-rw-r----- 1 sammy sammy 70 Feb 25 15:38 dump.rdb
-rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
ファイルがredisユーザーとグループによって所有されるように、アクセス許可を更新する必要があります。
- sudo chown redis:redis /var/lib/redis/dump.rdb
グループでも書き込み可能になるようにファイルを更新します。
- sudo chmod 660 /var/lib/redis/dump.rdb
次に、の内容を一覧表示します /var/lib/redis/
再びディレクトリ:
- ls -la /var/lib/redis/
今あなたの復元 dump.rdb
ファイルには正しい権限があります:
-rw-rw---- 1 redis redis 70 Feb 25 15:38 dump.rdb
-rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
ファイルを復元する前にRedisサーバーデーモンが実行されていて、現在は起動しない場合は、次のようなメッセージが表示されます。 Could not connect to Redis at 127.0.0.1:6379: Connection refused
—Redisのログを確認します。
ログに次のような行が表示された場合 Fatal error loading the DB: Permission denied. Exiting.
、次に、の権限を確認する必要があります dump.rdb
このステップで説明されているように、ファイル。
Redisを起動しています
次に、Redisサーバーを再起動する必要があります。
sudo service redis-server start
データベースの内容を確認する
復元が機能したかどうかを見てみましょう。
Redisにログインします。
- redis-cli
チェックしてください shapes:triangles
エントリ:
- GET shapes:triangles
出力は次のようになります。
"3 sides"
素晴らしい! 私たちの修復はうまくいきました。
出口:
- exit
AOFを使用していない場合は、これで完了です。 復元されたRedisインスタンスは通常の状態に戻るはずです。
(オプション)AOFの有効化
データベースへのすべての書き込みを追跡するためにAOFの使用を再開または開始する場合は、次の手順に従ってください。 AOFファイルはRedisコマンドラインから再作成する必要があります。
Redisにログインします。
- redis-cli
AOFをオンにします。
- BGREWRITEAOF
次の出力が得られるはずです。
Background append only file rewriting started
を実行します info
指図。 これにより、かなりの量の出力が生成されます。
- info
Persistence セクションまでスクロールし、aofエントリがここに表示されているものと一致することを確認します。 aof_rewrite_in_progressが0の場合、AOFファイルの再作成は完了しています。
# Persistence
. . .
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
AOFファイルの再作成が完了したことが確認されたら、Redisコマンドラインを終了できます。
- exit
次のファイルを一覧表示できます /var/lib/redis
また:
- ls /var/lib/redis
あなたはライブを見る必要があります .aof
次のようなファイルを再度作成します appendonly.aof
また redis-staging-ao.aof
、 一緒に dump.rdb
ファイルおよびその他のバックアップファイル。
それが確認されたら、Redisサーバーを停止します。
- sudo service redis-server stop
ここで、AOFを再度オンにします。 redis.conf
ファイル:
- sudo nano /etc/redis/redis.conf
次に、の値を変更してAOFを再度有効にします。 appendonly
に yes
:
appendonly yes
Redisを起動します:
- sudo service redis-server start
データベースの内容をもう一度確認したい場合は、データベースの内容の確認セクションをもう一度実行してください。
それでおしまい! 復元されたRedisインスタンスは通常の状態に戻るはずです。
結論
この記事に記載されている方法でRedisデータをバックアップすることは、同じサーバー上のディレクトリにデータをバックアップすることを気にしない場合に適しています。
もちろん、最も安全なアプローチは、別のマシンにバックアップすることです。 バックアップに関する次の記事を読むことで、より多くのバックアップオプションを調べることができます。
これらのバックアップ方法の多くは、同じファイルで使用できます。 /var/lib/redis
ディレクトリ。
Redisの移行と復元に関する今後の記事に注目してください。 また、参照することもできます rdiff-backup
使用方法に関するドキュメントの例 rdiff-backup
効果的に: