本文汇总云数据库 MongoDB 在数据导入导出与迁移上云方面的高频问题。所有命令示例中的 IP、用户名、密码均为占位符,请替换为真实连接信息后再执行。
云数据库 MongoDB 支持哪些数据迁移方式?
对于数据量较小的场景,也可使用 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. 删除数据后原空间未被复用。
而导入操作相当于做了一次数据整理,使数据存储更紧凑,因此占用空间更小。