Ubuntu14.04でRedisデータをバックアップおよび復元する方法

前書き ##

[ Redis](https://cloud.tencent.com/product/crs?from=10680)は、キー値がキャッシュされたデータベースであり、ディスクストレージ(つまり、データベース)に永続化(永続的に保存)できます。この記事では、Ubuntu14.04サーバーでRedisデータベースをバックアップする方法を学習します。

一般に、Redisデータはデフォルトで .rdbファイルのディスクに保存されます。これは、Redisデータセットのポイントインタイムスナップショットです。スナップショットは指定された間隔で生成されるため、バックアップに非常に適しています。

準備 ##

このチュートリアルの手順を完了するには、次のものが必要です。

最初のステップ-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ファイルも表示されます。このファイルには、サーバーが受信したすべての書き込み操作のログが含まれています。

基本的に、 .rdbファイルは現在のスナップショットであり、 .aofファイルはRedisの履歴を保存します。どちらもバックアップする価値があります。

.rdbファイルから始めて、2つのファイルの自動バックアップで終わります。

ステップ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データの場所がわかったので、バックアップを実行できます。 [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ジョブを設定することです。

ステップ4-rdiff-backupと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データを毎日バックアップできるようになりました。

ステップ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サーバーが稼働していることを確認してください。

このチュートリアルでは、この[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インスタンスを停止する必要があります。 ** 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ファイルに保存されている操作を再作成することは望ましくありません。

ディレクトリ / 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にアップロードする場合は、コマンド/ 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ファイルの権限を設定します

バックアップが作成されたのと同じサーバーに復元する場合は、すでに正しい権限を持っている可能性があります。

バックアップファイルを新しいサーバーにコピーする場合は、ファイルのアクセス許可を更新する必要がある場合があります。

/ 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を開始

次に、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

永続性セクションまでスクロールし、** 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

Ubuntu14.04でRedisデータをバックアップおよび復元する方法
Ubuntu14.04でRedisのインストールを保護する方法
Ubuntu14.04でRedisクラスターを構成する方法
Ubuntu16.04でRedisレプリケーションを構成する方法
Ubuntuのバックアップと復元
Ubuntu 16.04 /18.04にPycharmとIpythonをインストールする方法
Ubuntu16.04にNATSをインストールして構成する方法
Ubuntu18.04にGogsをインストールして構成する方法
Ubuntu18.04にCyberpanelをインストールして構成する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu18.04にGitLabをインストールして構成する方法
Ubuntu20.04にDockerをインストールして使用する方法
Ubuntu18.04にAnsibleをインストールして構成する方法
Ubuntu18.04にCurlをインストールして使用する方法
Ubuntu18.04にComposerをインストールして使用する方法
Ubuntu18.04にWineをインストールして使用する方法
Ubuntu14.04でDockerデータボリュームを使用する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu16.04にElasticsearchをインストールして構成する方法
CentOS8にRedisをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu20.04にComposerをインストールして使用する方法
Ubuntu14.04にBaasBoxをインストールして使用する方法
Ubuntu18.04にVNCをインストールして構成する方法
Ubuntu16.04にSphinxをインストールして構成する方法
Ubuntu14.04にOrientDBをインストールして構成する方法
Ubuntu16.04にPostgreSQLをインストールして使用する方法
Ubuntu12.04にAppScaleをインストールして構成する方法
Ubuntu16.04にDockerをインストールして使用する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu14.04でMongoDBバックアップを作成して使用する方法
Ubuntu18.04にMySQLWorkbenchをインストールして使用する方法
ubuntuシステムにtheanoとkerasをインストールする方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法