1. 准备工作
mongodump、mongorestore等命令),可通过官网下载对应版本的工具包解压安装。read权限(用于导出数据),目标数据库用户具备readWrite权限(用于导入数据);若开启认证,需准备好账号密码。2. 停止源数据库服务(可选,确保数据一致性)
若迁移期间不允许源数据库写入,可停止MongoDB服务以避免数据不一致:
# Systemd系统(如CentOS 7+、Ubuntu 16.04+)
sudo systemctl stop mongod
# SysVinit系统(如CentOS 6)
sudo service mongod stop
注:若允许源数据库继续写入,需确保后续使用
--oplog参数(用于增量同步),但会增加迁移复杂度。
3. 导出源数据库数据
根据数据量大小和需求选择合适的导出方式:
mongodump导出整个数据库(含结构和数据),生成BSON格式文件(适合跨服务器迁移):mongodump --host <源服务器IP> --port <源端口,默认27017> --username <用户名> --password <密码> --authenticationDatabase admin --db <源数据库名> --out /path/to/export/dir
示例:导出testdb数据库到/home/user/mongo_dump目录:mongodump --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --out /home/user/mongo_dump
--collection参数:mongodump --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --out /home/user/mongo_dump
mongoexport导出为JSON格式(仅保留数据,不保留索引、权限等信息):mongoexport --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --out /home/user/users.json
4. 传输导出文件到目标服务器
使用scp(安全拷贝)或rsync(增量同步)将导出的数据文件传输到目标服务器:
# scp传输(全量文件)
scp -r /path/to/export/dir <目标服务器用户名>@<目标服务器IP>:/path/to/target/dir
# 示例:将本地的mongo_dump目录传输到目标服务器的/home/user目录
scp -r /home/user/mongo_dump user@192.168.1.200:/home/user
注:
-r参数表示递归传输目录,确保所有子目录和文件都被复制。
5. 导入数据到目标数据库
根据导出格式选择对应的导入命令:
mongorestore导入mongodump生成的BSON文件(保留数据结构和索引):mongorestore --host <目标服务器IP> --port <目标端口,默认27017> --username <用户名> --password <密码> --authenticationDatabase admin --db <目标数据库名> /path/to/export/dir/<源数据库名>
示例:将/home/user/mongo_dump/testdb导入到目标服务器的testdb数据库:mongorestore --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb /home/user/mongo_dump/testdb
mongoimport导入mongoexport生成的JSON文件(仅导入数据):mongoimport --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --file /home/user/users.json
--oplogReplay参数导入增量数据(需配合mongodump --oplog使用):mongorestore --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --oplogReplay /home/user/mongo_dump/testdb
6. 验证数据完整性
mongo shell连接目标服务器,检查数据库和集合是否存在:mongo --host 192.168.1.200 --port 27017 -u admin -p 123456 --authenticationDatabase admin
> use testdb
> show collections
> db.users.countDocuments() # 检查users集合的文档数量
> db.users.find().limit(5) # 查看前5条数据
mongorestore会自动恢复索引,无需手动创建):> db.users.getIndexes()
7. 清理与切换
mongodb://192.168.1.200:27017/testdb)更新为目标服务器地址,重启应用以使用新数据库。