mongodbデータベースバックアップ


1.mongodbバックアップ


不測の事態が発生した場合、データベースのバックアップは非常に重要であり、問題が発生した場合、バックアップによってデータをリカバリする必要があります.
バックアップの一般的な方法は、次の2つです.

2.直接copyデータディレクトリ


mongodbのすべてのデータはデータディレクトリの下に配置され、デフォルトは/data/db/.
データベースをバックアップするには、データディレクトリの下にあるすべてのファイルcopyを1部だけコピーすればいいです.
しかし、これはデータベースサービスが先に停止する必要があります.サービスが実行時にこのディレクトリを直接バックアップした場合、一部のデータがバッファに残っているため、ファイルが破損する可能性があります.
オンラインで実行されているサービスでは、データベースのバックアップを停止することは不可能です.次は、バックアップのためにサービスを停止しないことです.

3. mongodump


mongodumpはmongodbに付属するツールで、実行時にバックアップできます.
mongodumpは、実行中のMongodbをクエリーし、クエリーしたドキュメントをディスクに書き込みます.

3.1 mongodump実行オプション


コマンドラインからオプションパラメータを問い合わせることができます
./bin/mongodump --help

共通パラメータ:
  -h  [ --host ]  arg                  
運転するホスト
  --port arg            
実行中のポート
  -u [ --username ] arg                
username
  -p [ --password ] arg                
password
  --dbpath arg                               
mongodbのデータベースディレクトリに直接アクセスしてバックアップします.
mongodが実行中でこのパラメータが使用できない場合は、データベース・ディレクトリがロックされます.
  -d [ --db ] arg                              
Database to useバックアップするデータベースは、すべてのデータベースを空にします.
  -c [ --collection ] arg                  
collection to use(some commands)は、すべてを空で表す集合を指定します.
-o[--out]arg(=dump)output directory or"-"for stdoutバックアップディレクトリに保存されているアドレス
  -q [ --query ] arg                    
json queryはクエリーを指定できます
次のようになります.
./bin/mongodump --host 127.0.0.1 --port 9980 --db news --out /home/work/backup/;
レプリカセットreplica set方式の場合、hostはレプリカセット名とhost、ポート
mongodump --host repl0/mongo0.example.net,mongo0.example.net:27018,mongo1.example.net,mongo2.example.net

3.2バックアップ・スクリプト


計画タスクを使用してデータベースをバックアップし、1時間に1回バックアップします.
作成されたバックアップディレクトリは次のとおりです.
 /home/gang/backup/mongodb/2014-03-29-10
shellスクリプト:
#! /bin/sh
# @author  bj1602#163.com
# @file backup.sh
# @desc  mongodb, 

set -x

hostname="127.0.0.1";
port="9980";
db="news";

log_date=`date +"%F-%H"`;
log_dir="/home/gang/backup/mongodb/$log_date";
mongo_dir="/home/gang/mongo/";

mkdir -p $log_dir;


echo `date +"%F %H:%M:%S"`;

cd $mongo_dir;

./bin/mongodump --host $hostname --db $db --port $port --out $log_dir;


echo `date +"%F %H:%M:%S"`;