[ Redis](https://cloud.tencent.com/product/crs?from=10680)は、キー値がキャッシュされたデータベースであり、ディスクストレージ(つまり、データベース)に永続化(永続的に保存)できます。この記事では、Ubuntu14.04サーバーでRedisデータベースをバックアップする方法を学習します。
一般に、Redisデータはデフォルトで .rdb
ファイルのディスクに保存されます。これは、Redisデータセットのポイントインタイムスナップショットです。スナップショットは指定された間隔で生成されるため、バックアップに非常に適しています。
このチュートリアルの手順を完了するには、次のものが必要です。
/ etc / redis / redis.conf
にあります。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
ファイルも表示されます。このファイルには、サーバーが受信したすべての書き込み操作のログが含まれています。
基本的に、 .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
Redisデータの場所がわかったので、バックアップを実行できます。 [Redis](http://redis.io/topics/persistence)公式[ウェブサイト]からの(http://redis.io/topics/persistence)の紹介は次のとおりです。
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ジョブを設定することです。
このセクションでは、2つのデータファイルを含むRedisデータディレクトリ全体をバックアップするように自動バックアップを構成します。
利用可能な自動バックアップツールがいくつかあります。このチュートリアルでは、更新されたユーザーフレンドリーなツール rdiff-backup
を使用します。
rdiff-backup
はコマンドラインバックアップツールです。サーバーに rdiff-backup
をインストールしていない可能性があるため、最初にインストールする必要があります。
sudo apt-get install -y rdiff-backup
インストールされたので、Redisデータをホームディレクトリのフォルダにバックアップすることでテストできます。この例では、ホームディレクトリは / home / sammy
であると想定しています。
スクリプトが存在しない場合、スクリプトは自動的にターゲットディレクトリを作成することに注意してください。つまり、自分で作成する必要はありません。
**-preserve-numeric-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の下部に次のエントリを追加します。
00*** rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
このCronエントリは、毎日深夜にRedisバックアップを実行します。 **-no file statistics **スイッチは、 rdiff-backup-data
ディレクトリ内の file_statistics
ファイルへの書き込みを禁止します。これにより、 rdiff-backup
の実行が速くなり、使用量が少なくなります。ディスクスペース。
または、次のエントリを毎日のバックアップに使用できます。
@ daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
現在、バックアップは1日1回行われるため、明日戻って最終テストを行うことができます。または、バックアップの頻度を一時的に増やして、正しく機能するようにすることもできます。
これらのファイルは** redis **システムユーザーが所有しているため、次のコマンドを使用して、ファイルが配置されていることを確認できます(バックアップが実際にトリガーされていることを確認してください)。
ls -l /home/sammy/redis
出力は次のようになります。
total 20-rw-rw----1 redis redis 70 Sep 1413:13 dump.rdb
drwx------3 root root 12288 Sep 1413:49 rdiff-backup-data
- rw-r-----1 redis redis 119 Sep 1413:09 redis-staging-ao.aof
同じサーバーのホームディレクトリに保存されている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クラスターチュートリアル](https://cloud.tencent.com/developer/article/1197979?from=10680)** Install 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
次に、現在のデータベースファイルの名前を変更します。
Redisは、その内容を dump.rdb
ファイルから読み取ります。リカバリファイルに道を譲るために、現在の名前を変更します。
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old
現在のバージョンがバックアップファイルよりも優れていることが確実な場合は、 dump.rdb.old
を復元できることに注意してください。
AOFは、Redisデータベースのすべての書き込み操作を追跡します。ただし、ポイントインタイムバックアップから復元しようとしているため、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
ここで、リカバリファイルを使用します。このチュートリアルの前の手順に従う場合は、ファイル / 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
にアップロードする場合は、コマンド/ 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サイトを参照してください。
バックアップが作成されたのと同じサーバーに復元する場合は、すでに正しい権限を持っている可能性があります。
バックアップファイルを新しいサーバーにコピーする場合は、ファイルのアクセス許可を更新する必要がある場合があります。
/ var / lib / redis /
ディレクトリにあるファイル dump.rdb
の権限を確認しましょう。
ls -la /var/lib/redis/
このようなものが表示された場合:
- rw-r-----1 sammy sammy 70 Feb 2515:38 dump.rdb
- rw-rw----1 redis redis 4137 Feb 2515: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 2515:38 dump.rdb
- rw-rw----1 redis redis 4137 Feb 2515:36 dump.rdb.old
ファイルを復元する前にRedisサーバーデーモンを実行した場合、起動に失敗します。「127.0.0.1:6379でRedisに接続できませんでした:接続が拒否されました」などのメッセージが表示されます。Redisログを確認してください。
ログに「DBの読み込み中に致命的なエラーが発生しました:アクセスが拒否されました。終了します。」という行が表示された場合は、この手順の説明に従って、 dump.rdb
ファイルのアクセス許可を確認する必要があります。
次に、Redisサーバーを再起動する必要があります。
sudo service redis-server start
修復が機能するかどうかを見てみましょう。
Redisにログインします。
redis-cli
shapes:triangles
エントリを確認してください:
GET shapes:triangles
出力は次のようになります。
"3 sides"
この結果は、修理作業が実施されたことを示しています。
exit
AOFを使用していない場合は、これで完了です。復元したRedisインスタンスは通常に戻るはずです。
データベースへのすべての書き込みを追跡するためにAOFの使用を再開または開始する場合は、次の手順に従ってください。 AOFファイルは、Redisコマンドラインから再作成する必要があります。
Redisにログインします。
redis-cli
AOFを開く:
BGREWRITEAOF
次の出力が得られるはずです。
Background append only file rewriting started
info
コマンドを実行します。これにより、多くの出力が生成されます。
info
永続性セクションまでスクロールし、** 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
appendonly.aof
や redis-staging-ao.aof
などのリアルタイムファイル .aof
と、 dump.rdb
ファイルやその他のバックアップファイルが再び表示されます。
確認後、Redisサーバーを停止します。
sudo service redis-server stop
ここで、 redis.conf
ファイルでAOFを再度開きます。
sudo nano /etc/redis/redis.conf
次に、 appendonly
の値を yes
に変更します。AOFを再度有効にします。
appendonly yes
Redisを開始します。
sudo service redis-server start
データベースの内容を再度確認する場合は、「**データベースの内容の確認」セクションを再度実行してください。
これで、Redisインスタンスは通常の状態に戻るはずです。
同じサーバー上のディレクトリにデータをバックアップしてもかまわない場合は、この記事に記載されている方法でRedisデータをバックアップすると非常に便利です。
もちろん、最も安全な方法は別のマシンにバックアップすることです。 / var / lib / redis
ディレクトリの同じファイルで複数のバックアップ方法を使用できます。
バックアップと復元に関するオープンソース情報チュートリアルの詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細をご覧ください。
参照:「Ubuntu14.04でRedisデータをバックアップおよび復元する方法」
Recommended Posts