温馨提示×

MongoDB数据迁移Ubuntu上如何操作

小樊
43
2025-10-25 04:39:46
栏目: 云计算

MongoDB数据迁移至Ubuntu的操作步骤

一、准备工作

  1. 目标Ubuntu环境配置
    确保目标Ubuntu服务器已安装MongoDB(若未安装,参考后续“安装MongoDB”步骤),并启动服务:

    sudo systemctl start mongod
    sudo systemctl enable mongod  # 设置开机自启
    

    验证服务状态:sudo systemctl status mongod(显示active (running)即为正常)。

  2. 源数据库准备
    确认源MongoDB数据库(本地/云端)可正常访问,记录源数据库名称、集合名称、连接信息(主机、端口、用户名/密码,若有认证)。

  3. 安装MongoDB工具包(Ubuntu)
    若目标Ubuntu未安装mongodb-org-tools(包含mongodumpmongorestore等工具),需先安装:

    # 导入MongoDB公钥
    wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
    # 添加MongoDB源(替换focal为Ubuntu版本代号,如jammy对应22.04)
    echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    # 更新包列表并安装工具
    sudo apt update
    sudo apt install -y mongodb-org-tools
    

二、选择迁移方法(根据需求选其一)

方法1:使用mongodump/mongorestore(推荐,适合完整数据库迁移)

步骤1:导出源数据库数据
在源环境执行以下命令,将数据库导出到本地目录(如/tmp/dump):

mongodump --uri="mongodb://源主机:27017" --db 源数据库名 --out /tmp/dump
  • 若源数据库需要认证,添加--username 用户名 --password 密码 --authenticationDatabase admin

步骤2:传输导出文件至目标Ubuntu
使用scp(安全复制)将导出目录传输到目标服务器:

scp -r /tmp/dump 目标Ubuntu用户@目标IP:/tmp/

步骤3:导入数据至目标MongoDB
在目标Ubuntu执行以下命令,将数据导入到目标数据库(如目标数据库名,可与源数据库同名):

mongorestore --uri="mongodb://目标UbuntuIP:27017" --db 目标数据库名 /tmp/dump/源数据库名
  • 若目标数据库需要认证,添加--username 用户名 --password 密码 --authenticationDatabase admin
  • 若目标数据库已存在且需覆盖数据,添加--drop参数(会先删除目标数据库中的现有数据)。

方法2:使用mongoexport/mongoimport(适合单集合或跨格式迁移)

步骤1:导出源集合数据为JSON/CSV
在源环境执行以下命令,导出指定集合到JSON文件(如/tmp/collection.json):

mongoexport --uri="mongodb://源主机:27017" --db 源数据库名 --collection 集合名 --out /tmp/collection.json
  • 若需导出为CSV,添加--type=csv --fields 字段1,字段2,...

步骤2:传输导出文件至目标Ubuntu
使用scp传输JSON/CSV文件到目标服务器:

scp /tmp/collection.json 目标Ubuntu用户@目标IP:/tmp/

步骤3:导入数据至目标MongoDB
在目标Ubuntu执行以下命令,将JSON/CSV文件导入到目标集合:

mongoimport --uri="mongodb://目标UbuntuIP:27017" --db 目标数据库名 --collection 集合名 --file /tmp/collection.json
  • 若目标集合已存在且需覆盖数据,添加--drop参数。
  • 若导入CSV文件,需指定字段名:--fields 字段1,字段2,...

三、验证迁移结果

  1. 连接目标MongoDB
    在目标Ubuntu执行以下命令,进入MongoDB shell:

    mongo --uri="mongodb://目标UbuntuIP:27017"
    
  2. 检查数据库和集合
    切换到目标数据库,查看集合是否存在:

    use 目标数据库名
    show collections
    
  3. 核对数据记录数
    查询目标集合的记录数,与源集合对比(确保数据一致性):

    db.集合名.countDocuments()
    

四、注意事项

  1. 数据一致性
    迁移前建议停止源数据库的写入操作(或使用--oplog参数进行增量备份,适用于生产环境),避免数据丢失。

  2. 版本兼容性
    确保源MongoDB与目标Ubuntu上的MongoDB版本兼容(如源版本为6.0,目标版本建议为6.0及以上)。

  3. 网络与权限

    • 若源数据库在远程服务器,确保目标Ubuntu可通过网络访问源数据库的端口(默认27017)。
    • 若启用了身份验证,确保使用的用户名/密码具有足够的权限(如read/readWritedbAdmin等)。
  4. 防火墙设置
    若目标Ubuntu启用了防火墙(如ufw),允许MongoDB端口:

    sudo ufw allow 27017/tcp
    
  5. 索引重建
    若迁移后查询性能下降,可在目标数据库中重新创建索引(导出/导入过程不会复制索引):

    db.集合名.createIndex({字段名: 1})  // 1表示升序索引
    

通过以上步骤,即可完成MongoDB数据从本地/云端到Ubuntu服务器的迁移。迁移后建议进行充分的测试,确保应用能正常访问目标数据库。

0