数据迁移问题

最近更新时间:2026-06-22 16:49:39

我的收藏
本文汇总云数据库 MongoDB 在数据导入导出与迁移上云方面的高频问题。所有命令示例中的 IP、用户名、密码均为占位符,请替换为真实连接信息后再执行。

云数据库 MongoDB 支持哪些数据迁移方式?

推荐使用 数据传输服务 DTS 进行迁移,支持云服务器自建实例、其他云或本地(经外网/专线)实例迁移上云,并支持结构迁移、全量迁移和增量同步,可实现不停机平滑迁移。详情参见 迁移总览
对于数据量较小的场景,也可使用 MongoDB 官方工具(mongodump/mongorestore、mongoexport/mongoimport)手动导入导出。

如何使用 mongodump 和 mongoexport 把数据导出到本地?

请使用与实例版本匹配的最新版 MongoDB Database Tools。两种工具区别如下:
mongodump:整库导出,BSON 格式,大数据量导出效率高。
mongoexport:单集合导出,JSON 格式,可读性好。
整库导出:
mongodump --host 10.0.0.1:27017 -u mongouser -p <password> --authenticationDatabase=admin --db=testdb -o /data/dump_testdb
单集合导出:
mongoexport --host 10.0.0.1:27017 -u mongouser -p <password> --authenticationDatabase=admin --db=testdb --collection=testcollection -o /data/export.json
说明:
可用 -f 指定导出字段,用 -q 指定查询条件限定导出范围。

如何使用 mongorestore 和 mongoimport 把数据导入到实例?

mongorestore:整库导入,对应 mongodump 的 BSON 输出。
mongoimport:单集合导入,对应 mongoexport 的 JSON 输出。
整库导入:
mongorestore --host 10.0.0.1:27017 -u mongouser -p <password> --authenticationDatabase=admin --dir=/data/dump_testdb
单集合导入:
mongoimport --host 10.0.0.1:27017 -u mongouser -p <password> --authenticationDatabase=admin --db=testdb --collection=testcollection2 --file=/data/export.json

导出数据时如何避免影响主节点性能?

mongodump 命令中追加 --readPreference=secondaryPreferred 参数,优先从从节点读取数据,避免对主节点造成压力。

数据导入实例后,为什么占用空间比自建时更小?

属于正常现象,主要原因:
1. 原库长期运行积累了大量增删改操作,产生空间空洞。
2. WiredTiger 出于性能考虑会预分配大于实际数据的空间。
3. 删除数据后原空间未被复用。
而导入操作相当于做了一次数据整理,使数据存储更紧凑,因此占用空间更小。

mongodump 无法导出数据怎么办?

请确认使用了与实例版本匹配的最新版 MongoDB Database Tools,过旧的工具可能不兼容新版认证方式或数据格式。导入导出的详细用法参见 数据导入导出