次のコマンドでMongoDBのすべてのコレクションをエクスポートします。
mongoexport -d dbname -o Mongo.json
年です。結果:
コレクションが指定されていません。
マニュアルによれば、コレクションを指定しなければ、すべてのコレクションがエクスポートされます。
しかし、なぜこれがうまくいかないのですか?
http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection
私のMongoDBのバージョンは2.0.6です
私のような怠惰な人々のために、私はそれがより速いmongodumpを使います:
mongodump -d <database_name> -o <directory_backup>
そしてそれを "restore/import"するために、私は使った(directory_backup/dump /から):
mongorestore -d <database_name> <directory_backup>
このソリューションでは、すべてのコレクションをそれぞれ収集して1つずつエクスポートする必要はありません。データベースを指定するだけです。私はビッグデータストレージにmongodump/mongorestoreを使用することを推奨します。それは非常に遅く、一度10/20GBのデータを過ぎると復元するのに数時間かかることがあります。
そのためにbashスクリプトを書きました。 2つのパラメータ(データベース名、ファイルを格納するディレクトリ)を指定して実行するだけです。
#!/bin/bash
if [ ! $1 ]; then
echo " Example of use: $0 database_name [dir_to_store]"
exit 1
fi
db=$1
out_dir=$2
if [ ! $out_dir ]; then
out_dir="./"
else
mkdir -p $out_dir
fi
tmp_file="fadlfhsdofheinwvw.js"
echo "print('_ ' + db.getCollectionNames())" > $tmp_file
cols=`mongo $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '`
for c in $cols
do
mongoexport -d $db -c $c -o "$out_dir/exp_${db}_${c}.json"
done
rm $tmp_file
以下の手順に従ってサーバーからmongodumpを作成し、ユーザー名とパスワードを持つ別のサーバー/ローカルマシンにインポートします。
1. mongodump -d dbname -o dumpname -u username -p password
2. scp -r user@remote:~/location/of/dumpname ./
3. mongorestore -d dbname dumpname/dbname/ -u username -p password
Mongodumpを使用してすべてのコレクションをエクスポートするには、次のコマンドを使用します。
mongodump -d database_name -o directory_to_store_dumps
復元するには、このコマンドを使用します。
mongorestore -d database_name directory_backup_where_mongodb_tobe_restored
Mongo DBをどこにインストールしたのか教えてください。 (UbuntuまたはWindows)
Windowsの場合:
mongodump --dbデータベース名 - 保存するパス
例:mongodump --db mydb --out c:\ TEMP\op.json
Ubuntuの場合:
mongodump -dデータベース名-o保存するファイル名
例:mongodump -d mydb -o output.json
Bsonフォーマットに問題がなければ、mongodumpユーティリティに同じ-dフラグを付けて使用できます。すべてのコレクションをbson形式でダンプディレクトリにダンプします(デフォルトは-oオプションで変更できます)。その後、mongorestoreユーティリティを使用してこれらのファイルをインポートできます。
Mongolab.comのようなリモートのmongoDBサーバーに接続したい場合は、接続認証情報を渡してください。
mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json
mongo --eval 'printjson(db.getCollectionNames())'
を使ってコレクションのリストを取得してから、それらすべてに対してmongoexportを実行することができます。これがRubyの例です
out = `mongo #{DB_Host}/#{DB_NAME} --eval "printjson(db.getCollectionNames())"`
collections = out.scan(/\".+\"/).map { |s| s.gsub('"', '') }
collections.each do |collection|
system "mongoexport --db #{DB_NAME} --collection #{collection} --Host '#{DB_Host}' --out #{collection}_dump"
end
これまでの回答でうまく説明されています。リモートのパスワードで保護されたデータベースを扱う場合に備えて、私は回答を追加しています。
mongodump --Host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path
Windowsのバッチスクリプトバージョンが必要です。このスレッドは便利だったので、私も自分の回答を投稿したいと思いました。
mongo "{YOUR SERVER}/{YOUR DATABASE}" --eval "rs.slaveOk();db.getCollectionNames()" --quiet>__collections.txt
for /f %%a in ('type __collections.txt') do @set COLLECTIONS=%%a
for %%a in (%COLLECTIONS%) do mongoexport --Host {YOUR SERVER} --db {YOUR DATABASE} --collection %%a --out data\%%a.json
del __collections.txt
私はset /p COLLECTIONS=<__collections.txt
を使用していくつかの問題を抱えていました、それ故に複雑なfor /f
メソッド。
必要に応じて、--fields
を指定せずにすべてのコレクションをcsvにエクスポートできます(すべてのフィールドをエクスポートします)。
http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/から このbashスクリプトを実行してください
OIFS=$IFS;
IFS=",";
# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
Host=HOSTNAME:PORT
# first get all collections in the database
collections=`mongo "$Host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);
# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
echo 'exporting collection' ${collectionArray[$i]}
# get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
keys=`mongo "$Host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.Push(key); }; keys;" --quiet`;
# now use mongoexport with the set of keys to export the collection to csv
mongoexport --Host $Host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done
IFS=$OIFS;
すべてのデータベース内のすべてのコレクションをダンプしたい場合(これは元の質問者の意図を広範囲に解釈したものです)。
mongodump
すべてのデータベースとコレクションは、現在の場所にあるdumpというディレクトリに作成されます。
私はたくさんの複雑な例を試した結果、非常に単純な方法でうまくいくことがわかりました。
ローカルからdbのダンプを取り、それをリモートインスタンスにインポートしたいと思いました。
ローカルマシン上:
mongodump -d databasename
それから私は自分のサーバーマシンにダンプをscpしました。
scp -r dump [email protected]:~
それからダンプの親ディレクトリから:
mongorestore
そしてそれはデータベースをインポートしました。
mongodbサービスはもちろん実行されていると仮定します。
次のコマンドを使用してZipファイルを作成できます。指定されたデータベース{dbname}のZipファイルを作成します。後で以下のZipファイルを自分のDBにインポートできます。
Window filepath=C:\Users\Username\mongo
mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}
エクスポートされたデータベースを復元するときに私にはうまくいったことがあります:
mongorestore -d 0 ./0 --drop
./はエクスポートされたbsonファイルを含みます。 --drop
は既存のデータを上書きすることに注意してください。
インデックスを含めて100%忠実な結果を得たいのであれば、これはかなり古い質問であり、mongodump/mongorestoreは明らかに正しい方法であることを私は認識しています。
しかし、特に変わったことがなければ、MongoDBの新旧バージョン間で互換性のある迅速で汚い解決策が必要でした。そしてそのために、私は最初の質問に対する答えを望みました。
上記の他に受け入れ可能な解決策がありますが、このUnixパイプラインは比較的短くて甘いです。
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
これにより、コレクションごとに適切な名前の.json
ファイルが生成されます。
データベース名( "mydatabase")が2回表示されていることに注意してください。私はデータベースがローカルであり、あなたが信任状を渡す必要がないと仮定します、しかしそれはmongo
とmongoexport
の両方でそれをするのは簡単です。
私はgrep -v
を捨てるのにsystem.indexes
を使っていることに注意してください。古いバージョンのMongoDBが新しいものからシステムコレクションを解釈しようとしたくないからです。代わりに、私のアプリケーションが通常のensureIndex
呼び出しを行ってインデックスを再作成することを許可しています。
データベースから各コレクションをエクスポート/インポートするためにmongoexportおよびmongoimportを使用する場合は、このユーティリティを は役に立ちます。私は何度か同様のユーティリティを使用しました。
LOADING=false
usage()
{
cat << EOF
usage: $0 [options] dbname
OPTIONS:
-h Show this help.
-l Load instead of export
-u Mongo username
-p Mongo password
-H Mongo Host string (ex. localhost:27017)
EOF
}
while getopts "hlu:p:H:" opt; do
MAXOPTIND=$OPTIND
case $opt in
h)
usage
exit
;;
l)
LOADING=true
;;
u)
USERNAME="$OPTARG"
;;
p)
PASSWORD="$OPTARG"
;;
H)
Host="$OPTARG"
;;
\?)
echo "Invalid option $opt"
exit 1
;;
esac
done
shift $(($MAXOPTIND-1))
if [ -z "$1" ]; then
echo "Usage: export-mongo [opts] <dbname>"
exit 1
fi
DB="$1"
if [ -z "$Host" ]; then
CONN="localhost:27017/$DB"
else
CONN="$Host/$DB"
fi
ARGS=""
if [ -n "$USERNAME" ]; then
ARGS="-u $USERNAME"
fi
if [ -n "$PASSWORD" ]; then
ARGS="$ARGS -p $PASSWORD"
fi
echo "*************************** Mongo Export ************************"
echo "**** Host: $Host"
echo "**** Database: $DB"
echo "**** Username: $USERNAME"
echo "**** Password: $PASSWORD"
echo "**** Loading: $LOADING"
echo "*****************************************************************"
if $LOADING ; then
echo "Loading into $CONN"
tar -xzf $DB.tar.gz
pushd $DB >/dev/null
for path in *.json; do
collection=${path%.json}
echo "Loading into $DB/$collection from $path"
mongoimport $ARGS -d $DB -c $collection $path
done
popd >/dev/null
rm -rf $DB
else
DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames()' | sed 's/,/ /g')
mkdir /tmp/$DB
pushd /tmp/$DB 2>/dev/null
for collection in $DATABASE_COLLECTIONS; do
mongoexport --Host $Host -u $USERNAME -p $PASSWORD -db $DB -c $collection --jsonArray -o $collection.json >/dev/null
done
pushd /tmp 2>/dev/null
tar -czf "$DB.tar.gz" $DB 2>/dev/null
popd 2>/dev/null
popd 2>/dev/null
mv /tmp/$DB.tar.gz ./ 2>/dev/null
rm -rf /tmp/$DB 2>/dev/null
fi
すでに、RobomongoやMongochefのようなGUIを使ってそのような操作を実行できます。
DBが呼び出されることを心配せずに、サーバー上のすべてのDBをバックアップする場合は、次のシェルスクリプトを使用します。
#!/bin/sh
md=`which mongodump`
pidof=`which pidof`
mdi=`$pidof mongod`
dir='/var/backup/mongo'
if [ ! -z "$mdi" ]
then
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
$md --out $dir >/dev/null 2>&1
fi
これはmongodumpユーティリティを使用します。mongodumpユーティリティは何も指定されていない場合はすべてのDBをバックアップします。
あなたはこれをあなたのcronjobに入れることができ、それはmongodプロセスが実行されている場合にのみ実行されます。バックアップディレクトリが存在しない場合も作成されます。
各DBバックアップは個々のディレクトリに書き込まれるため、グローバルダンプから個々のDBを復元できます。
#mongodump using sh script
#!/bin/bash
TIMESTAMP=`date +%F-%H%M`
APP_NAME="folder_name"
BACKUPS_DIR="/xxxx/tst_file_bcup/$APP_NAME"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
/usr/bin/mongodump -h 127.0.0.1 -d <dbname> -o $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
rm -rf /home/wowza_analytics_bcup/wowza_analytics/wowza_analytics
### 7 days old backup delete automaticaly using given command
find /home/wowza_analytics_bcup/wowza_analytics/ -mindepth 1 -mtime +7 -delete
まず、Mongo DBを起動します - そのためには - >のようにパスに移動します。
C:\ Program Files\MongoDB\Server\3.2\binに移動し、mongod.exeファイルをクリックしてMongoDBサーバーを起動します。
エクスポートするWindowsのコマンド
C:> mongodump - ホストremote_ip_address:27017 --db -o C:/ユーザー/デスクトップ/一時フォルダ
インポートするWindowsのコマンド
C:> mongorestore - ホスト= ip - ポート= 27017 -d C:/ユーザー/デスクトップ/一時フォルダ/ db-dir
やりたいことに応じて複数のオプションがあります
1)あなたのデータベースを他のmongoデータベースにエクスポートしたい場合は、mongodump
を使用するべきです。これにより、JSONにはないはずのメタデータを持つBSONファイルのフォルダーが作成されます。
mongodump
mongorestore --Host mongodb1.example.net --port 37017 dump/
2)データベースをJSONにエクスポートしたい場合は、canmongoexport
を使用してください。ただし、一度に1つずつコレクションを作成する必要があります(これは仕様によるものです)。しかし、私はデータベース全体をmongodump
でエクスポートしてからJSONに変換するのが最も簡単だと思います。
# -d is a valid option for both mongorestore and mongodump
mongodump -d <DATABASE_NAME>
for file in dump/*/*.bson; do bsondump $file > $file.json; done
ダンプの場合、DBは以下のコマンドに従います
mongodump -d <your d name> -o <dump path>
Ex:mongodump -d qualetics -o D:\dbpackup\qualetics
mongodumpコマンドを使用して実行できます
ステップ1:コマンドプロンプトを開く
ステップ2:mongoDBインストールのbinフォルダーに移動します(C:\ Program Files\MongoDB\Server\4.0\bin)
ステップ3:次のコマンドを実行します
mongodump -d your_db_name -o destination_path
your_db_name =テスト
destination_path = C:\ Users\HP\Desktop
エクスポートされたファイルは、destination_path\your_db_nameフォルダー(この例ではC:\ Users\HP\Desktop\test)に作成されます
参照: o7planning
輸出する:
mongo/bin> mongoexport -d webmitta -c domain -o domain-k.json
インポート:
mongoimport -d dbname -c newCollecionname --file domain-k.json
どこで
webmitta(db name)
domain(Collection Name)
domain-k.json(output file name)