web-dev-qa-db-ja.com

mongodbデータベースをlocalhostからリモートサーバーに移行する

ローカルのubuntuマシンにデータベースを作成しました。

リモートサーバーに転送するにはどうすればよいですか(ec2 Ubuntu)

41

TL; DR

mongodumpおよびmongorestore を使用して、MongoDBデータベースの完全なバイナリバックアップを取得(および復元)します。バックアップdumpディレクトリを圧縮して、Amazonインスタンスへのコピーを高速化します(BSONは非常によく圧縮される傾向があります)。

ベストプラクティス

特別な指示に従うのではなく、MongoDBマニュアルの標準 MongoDBツールによるバックアップと復元 チュートリアルを読むことを強くお勧めします。

Filesystem snapshot を使用することもできますが、mongodumpおよびmongorestoreはデータをエクスポートするだけなので、バックアップは小さくなります(つまり、リモートサーバーは継承しません- 過剰なストレージ割り当て 事前割り当てによる)。

81
Stennie

2サーバー間の自動同期
ローカルホストが外部から利用可能な場合、adminでcopydbを使用できます。
mongodbデータをあるハードウェアから別のハードウェアに移行します。

user@server:~$ mongo
MongoDB Shell version: 2.6.11
connecting to: test
> use admin
switched to db admin
>db.runCommand({copydb:1,fromhost:'your previous Host',fromdb:'Auctions_Data',todb:'Auctions_Data'})
{ "ok" : 1 }
11
Manoj Sahu

データベースのバックアップを作成して、S3バケットに転送できます。

まず、s3cmdをインストールします。

Sudo yum --enablerepo epel install s3cmd

#to configure s3cmd
s3cmd --configure

次に、backup.shファイルにバックアップルーチンを作成します。

#!/bin/bash

#Force file syncronization and lock writes
mongo admin --eval "printjson(db.fsyncLock())"

MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_Host="prod.example.com"
MONGO_PORT="27017"
MONGO_DATABASE="dbname"

TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="bucketname"
S3_BUCKET_PATH="mongodb-backups"


# Create backup
$MONGODUMP_PATH -h $MONGO_Host:$MONGO_PORT -d $MONGO_DATABASE

# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP

# Upload to S3
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.tar


#Unlock databases writes
mongo admin --eval "printjson(db.fsyncUnlock())"

bash backup.shを実行すると、mongodb-localhost-10-10-2013.tarのような新しいファイルが作成されます

リモートサーバーでは、wgetを使用してAmazon S3からファイルをダウンロードできます。 tar -xvf backupname.tarのようなtarを使用してバックアップファイルを抽出します。

復元するには、次を使用できます。

mongorestore --dbpath <database path> <directory to the backup>

このような:

mongorestore --dbpath /var/lib/mongo backup_directory_name

これでお役に立てば幸いです

他のソリューションに加えて、bashスクリプトを作成し、これを非常に簡単に実行できます。

#!/bin/bash

Host="somehost.com"
PORT="2345"
REMOTE_DB="some-remote-db"
LOCAL_DB="your-local-db"
USER="remote-user-name"
PASS="passwordForRemoteUser"

## DUMP REMOTE DATABASE
echo "Dumping '$Host:$PORT/$REMOTE_DB'..."
mongodump --Host $Host:$PORT --db $REMOTE_DB -u $USER -p $PASS

## RESTORE DUMP DIRECTORY
echo "Restoring to '$LOCAL_DB'..."
mongorestore --db $LOCAL_DB --drop dump/$REMOTE_DB

## REMOVE DUMP FILES
echo "Removing dump files..."
rm -r dump

echo "Finished."
2
sirrele

リモートサーバーにmongoソフトウェアをインストールするローカルコンピューターでmongodを停止します。データファイルと構成をリモートコンピューターにコピーします。データファイルのアクセス許可がローカルコンピューターと同じであることを確認します。次に、リモートサーバーでmongodを起動します。

0
Tata

データファイルを見つけ、必要なサーバーの場所にそれらをscpしたので、/data/db/*、パラメータmongodを使用してdbpathコマンドを開始できます:mongod --dbpath /data/dbすべてのファイルをこの新しいフォルダーに正しくコピーしたことを確認してください。

0
brayne