将 mongodb 数据库从本地主机迁移到远程服务器
Posted
技术标签:
【中文标题】将 mongodb 数据库从本地主机迁移到远程服务器【英文标题】:Migrate mongodb database from localhost to remote servers 【发布时间】:2014-02-13 17:20:33 【问题描述】:我在本地 ubuntu 机器上创建了一个数据库。
如何将其传输到我的远程服务器(ec2 Ubuntu)
【问题讨论】:
【参考方案1】:在远程服务器上安装 mongo 软件 在本地计算机上停止 mongod。 将数据文件和配置复制到远程计算机。 验证数据文件的权限是否与本地计算机上的权限相同。 然后在远程服务器上启动 mongod。
【讨论】:
step1:我使用 sudo service mongodb stop.step2 停止了我的 mongodb ..我制作了 /var/lib/mogodb 文件的 tar 球并将 scp 发送到服务器..但是如何配置它??? 如何复制数据? @PraveenSinghYadav 您可能也想复制配置。检查 /etc/mongod.conf 文件 如果源服务器和目标服务器具有不同的操作系统(即 Debian 到 CentOS 或 Windows),是否仍然可以复制数据库文件? 我个人没有尝试过,但我认为它可以工作。【参考方案2】:现在您已经找到您的数据文件,并将它们 scp 编辑到必要的服务器位置,例如 /data/db/*
,您可以使用参数 dbpath
启动您的 mongod
命令:mongod --dbpath /data/db
确保您已将所有文件正确复制到这个新文件夹中。
【讨论】:
但是我将如何在 EC2 mongodb 实例上上传db
数据?【参考方案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 下载文件。
使用tar
提取备份文件,如tar -xvf backupname.tar
。
要恢复,您可以使用:
mongorestore --dbpath <database path> <directory to the backup>
像这样:
mongorestore --dbpath /var/lib/mongo backup_directory_name
我希望这足以帮助你
【讨论】:
那么如何将mondodb的链接添加到我的应用程序。在service.js
mongoose.connect('mongodb://localhost:27017/mean-demo');
尝试了mongorestore ...
行,得到“如果您在同一路径上运行 mongod,您应该连接到该路径而不是直接访问数据文件”。发现没有 --dbpath TL;DR
使用mongodump
and mongorestore
获取(并恢复)MongoDB 数据库的完整二进制备份。压缩备份的dump
目录,以便更快地复制到您的 Amazon 实例(BSON 往往压缩得很好)。
最佳做法
我强烈建议您阅读 MongoDB 手册中的标准 Backup and Restore with MongoDB Tools 教程,而不是遵循临时说明。
您也可以使用Filesystem snapshot,但mongodump
和mongorestore
仅导出数据,因此您的备份会更小(即,由于预分配,您的远程服务器不会继承任何excessive storage allocation)。
【讨论】:
你好..你能说我想添加什么链接来连接 ubuntu 服务器 monogo db。像mongodb://localhost:27017/myapp
我们使用这个来连接本地主机数据库,当连接到远程服务器时我们只想添加我们的服务器IP地址?
@Stennie 我收到了recv(): message len 759714643 is too large. Max is 48000000
,你知道怎么处理吗?
请注意,当您使用 mongorestore
从 mongodump
文件恢复数据库时,即使在几 GB 的数据库上,操作也非常非常慢。这需要几个小时到几天甚至几周!【参考方案5】:
两台服务器之间自动同步 如果您的本地主机可从外部使用,您可以在管理员中使用 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
【讨论】:
快速,就像一个魅力 - docs.mongodb.com/manual/reference/command/copydb 我们可以制作一个脚本,我们可以在其中一次为多个数据库执行此操作【参考方案6】:除了其他解决方案之外,您还可以创建一个 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."
【讨论】:
以上是关于将 mongodb 数据库从本地主机迁移到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章