Linux で MongoDB のリモート自動バックアップを実装する方法

Linux で MongoDB のリモート自動バックアップを実装する方法

序文

古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読んだ後、私は最近、継母が運営するプロジェクトを引き継いだことを知りました。プロジェクトのデータベースを保守している人は誰もおらず、DBA はさまざまな理由で当面は引き継ぐことを拒否しました。バックアップのない裸のデータベースに直面して、私は非常に不安になったので、本番環境の自動バックアップを設定するために時間を費やしました。

詳しい紹介を見てみましょう。

準備

全てバックアップを取っているので、安全のためバックアップとライブラリを同じサーバには置かず、運用保守からサーバを申請し、同時にmongoもインストールしました。mongoのインストール方法が分からない方は前回の記事を読んでみてください。

インストール後、まずは対象のmongodbにリモートアクセスできるかどうかをテストし、mongoがインストールされているbinディレクトリに移動します。

./mongo 10.100.1.101:27017 #mongoのIPとポートをターゲットとする

次に、バックアップ ファイルを配置するディレクトリなど、必要なディレクトリをいくつか作成します。

次に、mongodump を使用してデータベースをバックアップしてテストします。

./bin/mongodump --host test/10.100.1.101:27017,10.100.1.102:27017 -d testdb --out /data/temp

# test はレプリカ セット名です。# 10.100.1.101:27017、10.100.1.102:27017 はレプリカ セット ノードです。複数のノードを持つことができます。# -d testdb はバックアップするデータベースの名前です。入力しない場合は、デフォルトのレプリカ セット内のすべてのノードが対象となります。# --out 保存パス

この時点で、mongo バックアップは実装されており、あとは自動化するだけです。

スクリプトの作成

自動スケジュールバックアップは、実際には crontab コマンドによって実行されます。しかし、前提として、定期的に実行されるスクリプトを作成する必要があります。まず、新しいスクリプトを作成します。

vi /home/local/mongod_bak.sh

次に、対応するスクリプトを記述します。スクリプトには、参考のために対応するコメントがあります。ここでは、主に 3 つのアクションがあります。最初はバックアップし、次にバックアップ ファイルを圧縮し、最後の 7 日間のファイルのみを保持します。

#!/bin/bash
sourcepath='/home/local/mongodb/bin' #mongodb ファイル パス targetpath='/home/local/mongodb_bak' #バックアップ パス nowtime=$(date +%Y-%m-%d-%H)
replicationname='test' #レプリカセット名 dbname='testdb' #データベース名 port='27017' #ポート ip1='10.100.1.101' #ip
ip2='10.100.1.102'

echo "=============== バックアップを開始 ${nowtime} ================"
始める()
{
 ${ソースパス}/mongodump --host ${レプリケーション名}/${ip1}:${ポート},${ip2}:${ポート} -d ${データベース名} --out ${ターゲットパス}/${現在時刻}
}
実行する()
{
 始める
 [ $? -eq 0 ]の場合
 それから
 echo "正常に戻りました!"
 それ以外
 「バック失敗!」をエコーし​​ます。
 フィ
}
 
if [ ! -d "${targetpath}/${nowtime}/" ]
それから
 mkdir ${targetpath}/${nowtime}
フィ
実行する
echo "=============== バックエンド ${nowtime} ================"

echo "=============== zip ${nowtime} を開始します ==============="
zip -r ${ターゲットパス}/${nowtime}.zip ${ターゲットパス}/${nowtime}
rm -rf ${ターゲットパス}/${現在時刻}
echo "=============== zip 終了 ${nowtime} ==============="

echo "=============== 7日前の ${nowtime} の削除を開始 ================"
${targetpath} -type f -mtime +7 -name "*" -exec rm -rf {} \; を検索します。 
echo "=============== 削除終了 ${nowtime} ================"

書き込み後、ファイルに実行権限を与え、手動でテストを実行します。

chmod +x /home/local/mongod_bak.sh

スケジュールされたタスク

最後のステップは、実行プランを追加し、/etc/crontabを変更することです。

crontab -e

実行スクリプトを追加して保存します。

30 1 * * * /home/local/mongod_bak.sh #毎日午前1時30分にバックアップが実行されることを示します

ここでcrontabについて簡単に紹介します。

crontab コマンドは Unix および Unix 系オペレーティング システムでよく使用され、定期的に実行される命令を設定するために使用されます。このコマンドは、標準入力デバイスから命令を読み取り、後で読み取って実行できるように crontab ファイルに保存します。

通常、crontab に保存された命令はデーモン プロセスによってアクティブ化されます。Crond はバックグラウンドで実行されることが多く、実行予定のジョブがあるかどうかを 1 分ごとにチェックします。これらのジョブは一般に cron ジョブと呼ばれます。

一般的なコマンドをいくつか以下に示します。

#サービスを開始 /sbin/service crond start 

#サービスをシャットダウンします /sbin/service crond stop 

#サービスを再起動します /sbin/service crond restart 

#設定を再読み込み /sbin/service crond reload 

#crontab サービスのステータスを表示するサービス crond ステータス 

#crontab サービスを手動で開始する service crond start 

#crontab サービスが起動時に開始するように設定されているかどうかを確認し、次のコマンドを実行します。
ntsysv

#自動起動を追加:
chkconfig --level 35 crond オン

# crontabファイルを一覧表示する crontab -l

#crontabファイルを編集するcrontab -e

#crontabファイルを削除する $ crontab -r

# 失われた crontab ファイルを復元します # $HOME ディレクトリにバックアップがある場合は、それを /var/spool/cron/<username> にコピーできます。ここで、<username> はユーザー名です。 # または、次のコマンドを使用します。ここで、<filename> は $HOME ディレクトリにあるコピーのファイル名です。crontab <filename>

要約する

ゆっくりやれば良い仕事ができます。最初は難しくて面倒に思えるかもしれませんが、落ち着いてじっくり勉強してみると、やはり簡単に理解できます。結局、罠に陥るのはあなただけではありませんから、一生懸命勉強すべきです。

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

以下もご興味があるかもしれません:
  • Windows で MongoDB を自動的にバックアップするためのバッチ スクリプト
  • Linux での MongoDB データベースの自動バックアップの詳細な説明
  • MongoDBは自動バックアップの完全なプロセス記録を実現

<<:  Vue のディスパッチとブロードキャストの自己実装の詳細説明 (ディスパッチとブロードキャスト)

>>:  CentOS 7 で RPM を使用して mysql5.7.13 をインストールする

推薦する

Vueにおけるキーの役割と原理の詳細な説明

目次1. 結論から始めましょう2. キーの役割2.1 例2.2 上記の例を修正する2.3 例を再度修...

MySQL 起動失敗の問題とシナリオ分析

1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

React でインデックスをキーとして使用することが推奨されないのはなぜですか?

1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

MySQL で複数の主キーが定義されているエラーの解決方法

主キーを作成するには 2 つの方法があります。 テーブルテーブル名を作成( フィールド名タイプ、 フ...

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...

Docker は MySQL をインストールし、中国語の文字化けの問題を解決します

目次1. MySQLイメージを取得する2. ダウンロードが完了したか確認する3. MySQLはローカ...

CocosCreator 一般的なフレームワーク設計リソース管理

目次Cocos Creator のリソース管理に関する問題リソースの依存関係リソースの使用レスローダ...

テーブルを動的に読み込み、削除する JavaScript

この記事では、テーブルを動的に読み込み、削除するためのJavaScriptの具体的なコードを参考まで...

Win10 での MySQL 8.0.20 のインストールと設定のチュートリアル

Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

MySQL InnoDB インデックス拡張の詳細な説明

インデックス拡張: InnoDB は、プライマリ キー列をそのインデックスに追加することで、各セカン...

デザイナーの「職業病」について

デザイナーは世界で最も繊細で感情的な人々だと私はいつも感じています。私がこう言うときに優越感を感じる...