一.导出和导入
可以使用MongoDB提供的mongodump和mongorestore命令来导出和导入数据。mongodump命令可以将指定数据库的数据导出为BSON格式文件,而mongorestore命令可以将BSON格式文件导入到指定数据库中。
参数解释
-h host,填写ip地址加上端口号
-u username, mongo的用户名
-p passwd,mongo的密码
-d database,mongo的数据库名
-c collection,mongo的数据表名
-q query,mongo的查询条件
-o output,mongodump数据存放位置
–forceTableScan 强制扫描整个表(解决版本不一致问题)
mongodump到库级别,mongodump database1 database2两个库
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 database2 -o /mongotest --forceTableScan
mongodump到表级别,mongodump database1 的database1col表
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest --forceTableScan
mongodump到具体查询条件,mongodump database1 的database1col表中id>1000的数据
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -q {“id”:{$gte:1000}} -o /mongotest --forceTableScan
mongorestore到库级别,mongorestore database1库
mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 /mongotest/database1
mongorestore到表级别,mongorestore database1 的database1col表
mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest/database1/database1col.bson --forceTableScan
二.复制集切换
可以通过创建一个相同结构的新复制集来进行数据迁移。首先,在新的复制集中添加一个新的节点,然后将旧复制集中的数据复制到新的节点上。最后,将应用程序的连接切换到新复制集。
1.针对目标mongo服务已经存在,并正在运行的(mongo2–>mongo)。
执行步骤:
(1).停止源/目标服务器的mongo服务。
mongod --dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/logs/mongodb.log --shutdown
mongod --dbpath /usr/local/mongodb/data/db2 --logpath /usr/local/mongodb/logs/mongodb2.log --shutdown
(2).删除目标mongo服务的数据目录
rm -rf /usr/local/mongodb/data/db
(3).将待备份的mongo数据目录复制到目标服务绑定的数据目录
cp -r /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db
(4).启动目标mongo服务
mongod -f /usr/local/mongodb/mongodb.conf
2.对于目标mongo为新增,未启动的(mongo–>mongo3)
(1).新增配置文件
cp mongodb2.conf mongodb3.conf。
然后修改相应的端口和数据目录
(2).将待备份的mongo数据目录复制到新mongo的数据目录
cp -r /usr/local/mongodb/data/db /usr/local/mongodb/data/db3
(3).启动mongo服务
三.分片集群迁移
如果已经使用了MongoDB的分片集群,可以通过创建一个新的分片集群,并将旧集群中的数据逐步迁移到新集群中来进行数据迁移。这可以通过将旧集群中的一个分片的数据迁移到新集群中的一个分片,然后逐步迁移其他分片的数据来实现。
1.去源机器的源数据库新建一个账户(跟在admin新建的一致就行,每个数据库都需要新建一个)
mongo host:port -u username -p passwd --authenticationDatabase admin
use admin
db.createUser({user:‘testuser’,pwd:‘testpass’,roles:[‘userAdminAnyDatabase’]})
use database1(即将复制的库)
db.createUser({user:‘testuser’,pwd:‘testpass’,roles:[‘readWrite’]})
2.登录目标机器
mongo host:port -u username -p passwd --authenticationDatabase admin
3.执行复制命令
//需要用到源机器的ip\端口\库名,目标机器–需要新增的库名\新建的用户名\密码
db.copyDatabase(“database1”,“database1”,“host:port”,“testuser”,“testpass”,“SCRAM-SHA-1”)
四.第三方工具
还可以使用一些第三方工具来进行MongoDB数据迁移,例如MongoDB Connector for BI、MongoDB Compass、Robomongo等工具。这些工具提供了更多的功能和选项,可以更方便地进行数据迁移。
推荐使用Mongo-Shake