将mongodb数据库从localhost迁移到远程服务器

时间:2014-01-23 08:55:20

标签: mongodb database-migration nosql

我在本地的ubuntu机器上创建了一个数据库。

如何将其传输到我的远程服务器(ec2 Ubuntu)

6 个答案:

答案 0 :(得分:78)

TL; DR

使用mongodump and mongorestore获取(并恢复)MongoDB数据库的完整二进制备份。压缩备份dump目录,以便更快地复制到您的Amazon实例(BSON往往压缩得很好)。

最佳做法

我强烈建议您阅读MongoDB手册中的标准Backup and Restore with MongoDB Tools教程,而不是遵循adhoc说明。

您还可以使用Filesystem snapshot,但mongodumpmongorestore仅导出数据,以便您的备份更小(即您的远程服务器不会继承任何excessive storage allocation由于预分配)。

答案 1 :(得分:11)

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 }

答案 2 :(得分:3)

您可以创建数据库备份并将其传输到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下载文件。 使用tartar -xvf backupname.tar提取备份文件。

要恢复,您可以使用:

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

像这样:

mongorestore --dbpath /var/lib/mongo backup_directory_name

我希望这足以帮助你

答案 3 :(得分:2)

除了其他解决方案,您还可以创建一个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."

答案 4 :(得分:0)

在远程服务器上安装mongo软件 在本地计算机上停止mongod。 将数据文件和配置复制到远程计算机。 验证数据文件的权限与本地计算机上的权限相同。 然后在远程服务器上启动mongod。

答案 5 :(得分:0)

现在您已找到数据文件并将其显示到必要的服务器位置,例如/data/db/*,您可以使用参数mongod启动dbpath命令:mongod --dbpath /data/db确保已将所有文件正确复制到此新文件夹中。