1. 准备工作
mongodump),防止数据丢失。mongod服务正常运行。read权限(用于导出),目标数据库用户具备write权限(用于导入);若开启认证,需准备好账号密码。2. 停止源MongoDB服务(可选但推荐)
为确保数据一致性,建议停止源服务器上的MongoDB服务,避免迁移过程中数据修改:
# 使用systemctl(适用于大多数现代Linux发行版,如CentOS 7+、Ubuntu 16.04+) sudo systemctl stop mongod # 若使用旧版init系统(如CentOS 6) sudo service mongod stop 停止服务后,可通过ps -ef | grep mongod确认进程已终止。
3. 迁移数据(选择合适方法)
根据数据量、实时性要求选择以下方法之一:
全量导出:在源服务器上执行mongodump,将数据导出为BSON格式(保留索引、数据类型等结构):
mongodump --host <源服务器IP> --port 27017 --out /path/to/source_dump 示例:导出mydb数据库到/tmp/mydb_dump目录:
mongodump --host 192.168.1.100 --port 27017 -d mydb -o /tmp/mydb_dump 传输备份文件:将导出的dump目录复制到目标服务器(使用scp或rsync):
scp -r /path/to/source_dump user@target_server:/path/to/target_dump 示例:将/tmp/mydb_dump复制到目标服务器的/tmp目录:
scp -r /tmp/mydb_dump user@192.168.1.200:/tmp 全量恢复:在目标服务器上执行mongorestore,将数据导入到目标MongoDB实例:
mongorestore --host <目标服务器IP> --port 27017 /path/to/target_dump/<数据库名> 示例:恢复mydb数据库到目标服务器的默认数据目录:
mongorestore --host 192.168.1.200 --port 27017 /tmp/mydb_dump/mydb 增量迁移(可选):若需同步迁移后的增量数据,可使用mongodump的--query参数导出自上次备份后修改的数据(需记录上次备份时间),再通过mongorestore导入目标服务器。
导出数据:在源服务器上执行mongoexport,将指定集合导出为JSON或CSV格式(适合小数据量或跨系统迁移):
mongoexport --host <源服务器IP> --port 27017 -d <数据库名> -c <集合名> --out /path/to/export_file.json 示例:导出mydb数据库的users集合到JSON文件:
mongoexport --host 192.168.1.100 --port 27017 -d mydb -c users -o /tmp/users.json 传输导出文件:将导出的JSON/CSV文件复制到目标服务器(使用scp):
scp /path/to/export_file.json user@target_server:/path/to/target_file.json 导入数据:在目标服务器上执行mongoimport,将数据导入到目标数据库:
mongoimport --host <目标服务器IP> --port 27017 -d <数据库名> -c <集合名> --file /path/to/target_file.json 示例:导入users.json到目标服务器的mydb数据库:
mongoimport --host 192.168.1.200 --port 27017 -d mydb -c users /tmp/users.json 注:mongoexport/mongoimport会丢失BSON格式中的部分特性(如索引、数据类型),仅适合简单数据迁移。
4. 验证数据一致性
连接目标数据库:使用mongo shell连接到目标MongoDB实例:
mongo --host <目标服务器IP> --port 27017 -u <用户名> -p <密码> --authenticationDatabase admin 检查数据量:查询目标数据库的集合数量、文档数量是否与源数据库一致:
use mydb; show collections; // 检查集合是否存在 db.users.countDocuments(); // 检查文档数量(替换为实际集合名) 抽样验证:随机抽取部分文档,对比源数据库与目标数据库的内容是否一致:
db.users.findOne({_id: ObjectId("xxxxxx")}); // 替换为实际文档ID 5. 更新客户端连接配置
修改连接字符串:将应用程序或客户端的连接字符串指向目标服务器的IP地址和端口(默认27017):
mongodb://<目标服务器IP>:27017/<数据库名> 示例:若目标服务器IP为192.168.1.200,数据库名为mydb,则连接字符串为:
mongodb://192.168.1.200:27017/mydb 测试连接:通过客户端(如MongoDB Compass、Robo 3T)或应用程序测试连接,确保能正常访问目标数据库。
6. 清理工作(可选)
dump目录和目标服务器的临时备份文件,释放存储空间。sudo systemctl start mongod