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 をインストールする

推薦する

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...

VMware での Ubuntu Docker のインストール (コンテナ構築)

1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

IPとポートが接続可能かどうかを検出する方法

Windows コマンドテルネット形式: telnet IP ポート場合: テルネット 191.1....

MySQL の最適化: 高品質の SQL 文を書く方法

序文インターネット上にはデータベースの最適化に関する情報や方法が数多くありますが、その多くは品質にば...

MySQL学習データベース検索文DQL小百章

目次1. データの簡単な取得2. データの並べ替えと取得2.1. 基本構文2.2. ソート方向を指定...

Jenkins の Docker のデプロイとインストール手順

まず、Docker がインストールされたサーバーが必要です。 (私はすでにこれをサーバーにインストー...

mysql トリガーの作成と使用例

目次トリガーとは何かトリガーを作成するMySQL 作成構文のキーワードの説明: 1. MySQL ト...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...

div が iframe に覆われるいくつかの状況とその解決策

類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...

WeChatアプレットのスクロールビューが左右連動効果を実現

WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容...

21 の MySQL 標準化および最適化のベスト プラクティス!

序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...

MySQL でデータを削除してもテーブル ファイルのサイズが変更されないのはなぜですか?

長期間稼働しているデータベースの場合、テーブルがストレージ領域を占有しすぎるという問題がよく発生しま...

Linux で起動時にプログラムを自動的に実行させる最も簡単な方法

たくさん集めましたが、すべて失敗に終わりました。最終的に、この方法は優れており、使用に影響を与えない...