MongoDB 数据迁移到 CentOS 的可行方案
一、方案总览与选择
- 整库物理迁移(文件拷贝)
- 适用:同版本或兼容版本的 MongoDB,需要快速、一致地迁移全部数据(含索引、存储引擎元数据)。
- 思路:在源端干净停机,拷贝数据文件与配置到目标 CentOS,调整路径与权限后启动。
- 逻辑备份恢复(mongodump/mongorestore)
- 适用:跨版本、跨平台或只需迁移部分库/集合;对停机时间较敏感可分批进行。
- 思路:用 mongodump 导出为 BSON,在目标端用 mongorestore 恢复。
- 单集合导出导入(mongoexport/mongoimport)
- 适用:只需迁移少量集合,或导出为 JSON/CSV 做分析、共享。
- 思路:用 mongoexport 导出为 JSON/CSV,在目标端用 mongoimport 导入。
二、方案一 整库物理迁移(文件拷贝)
- 源端准备
- 干净停机:在 mongo shell 执行
- use admin
- db.shutdownServer()
- 或 systemd 停止:systemctl stop mongod
- 拷贝数据与配置
- 推荐 rsync(断点续传、保留属性):
- rsync -avz --progress /var/lib/mongo/ user@目标IP:/var/lib/mongo/
- rsync -avz --progress /etc/mongod.conf user@目标IP:/etc/mongod.conf
- 若目录不同,需在目标端调整 /etc/mongod.conf 中的 storage.dbPath 与 systemLog.path。
- 目标端启动与验证
- 启动:systemctl start mongod
- 验证:mongosh --host 127.0.0.1:27017 并执行 show dbs、db.stats()
- 注意
- 版本尽量一致;如变更 storage.engine(如从 wiredTiger 到 inMemory)不可直接复用数据文件。
- 文件权限与属主需匹配 mongod 运行用户(常见为 mongod:mongod)。
- 云盘/容器场景注意挂载点与 SELinux/AppArmor 策略。
三、方案二 逻辑备份恢复(mongodump/mongorestore)
- 源端导出
- 全库:
- mongodump --host 源主机 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -o /data/dump_20260102
- 单库:
- mongodump --host 源主机 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -o /data/dump_db
- 单集合:
- mongodump --host 源主机 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 -o /data/dump_coll
- 传输到 CentOS
- scp -r /data/dump_20260102 user@目标IP:/data/
- 目标端恢复
- 全库:
- mongorestore --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin --dir /data/dump_20260102
- 单库:
- mongorestore --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 --dir /data/dump_db/数据库名
- 单集合:
- mongorestore --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 --file /data/dump_coll/集合名.bson
- 常用参数
- –drop:恢复前删除目标集合(谨慎使用)。
- –gzip/–archive:导出为压缩归档,便于传输与存储。
- 适用场景
- 跨版本迁移、只迁移部分库/集合、对停机时间有要求可分库分表逐步恢复。
四、方案三 单集合导出导入(JSON/CSV)
- 导出
- JSON:
- mongoexport --host 源主机 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 -o /data/coll.json
- CSV(指定字段):
- mongoexport --host 源主机 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 -f 字段1,字段2 --csv -o /data/coll.csv
- 导入
- JSON:
- mongoimport --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 --file /data/coll.json
- CSV:
- mongoimport --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase=admin -d 数据库名 -c 集合名 --type csv --headerline --file /data/coll.csv
- 适用场景
- 只需迁移少量集合、导出为可读格式(JSON/CSV)进行共享或分析。
五、CentOS 端前置准备与常见注意事项
- 安装 MongoDB(若目标端未安装)
- 添加仓库并安装(以 4.4 为例):
- 创建 /etc/yum.repos.d/mongodb-org-4.4.repo,内容:
- [mongodb-org-4.4]
- name=MongoDB Repository
- baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
- gpgcheck=1
- enabled=1
- gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
- 安装:yum install -y mongodb-org
- 启动与开机自启:systemctl start mongod && systemctl enable mongod
- 防火墙与网络
- 开放端口:firewall-cmd --zone=public --add-port=27017/tcp --permanent && firewall-cmd --reload
- 安全与认证
- 启用鉴权:编辑 /etc/mongod.conf
- 重启:systemctl restart mongod
- 创建管理员并验证连接:
- 连接:mongosh -u admin -p 密码 --authenticationDatabase admin
- 验证:show dbs、db.stats()
- 迁移限制与建议
- 云数据库或托管实例通常禁止导入 local/admin 数据库,避免鉴权与元数据错乱。
- 物理迁移要求 MongoDB 版本兼容;逻辑迁移对版本更友好。
- 大数据量建议分批迁移、在低峰期执行,并做好全量与增量校验(如集合计数、重要文档抽样对比)。