温馨提示×

mongodb数据迁移centos上怎么弄

小樊
44
2026-01-02 02:41:32
栏目: 云计算

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(如从 wiredTigerinMemory)不可直接复用数据文件。
    • 文件权限与属主需匹配 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
      • security:
        • authorization: enabled
    • 重启:systemctl restart mongod
    • 创建管理员并验证连接:
      • 连接:mongosh -u admin -p 密码 --authenticationDatabase admin
      • 验证:show dbs、db.stats()
  • 迁移限制与建议
    • 云数据库或托管实例通常禁止导入 local/admin 数据库,避免鉴权与元数据错乱。
    • 物理迁移要求 MongoDB 版本兼容;逻辑迁移对版本更友好。
    • 大数据量建议分批迁移、在低峰期执行,并做好全量与增量校验(如集合计数、重要文档抽样对比)。

0