数据迁移指南

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本指南为您提供了从社区MongoDB迁移至PolarDB PostgreSQL详尽的操作步骤和最佳实践。PolarDB提供多种迁移工具,通过全量同步与增量同步相结合的方式,帮助您实现平滑、低停机时间的数据迁移。

迁移方案对比与决策

根据业务对停机时间、数据量、操作复杂度等要求,选择合适的迁移方案。

特性

在线迁移 (使用DTS)

离线迁移 (使用mongodump)

核心优势

支持增量数据同步,业务中断时间为分钟级。

操作简单,无额外迁移服务费用。

停机时间

分钟级(仅在最后业务切换阶段需要短暂停止写入)。

小时级或更长,取决于数据量和网络带宽,整个迁移过程需要停服。

数据一致性

准实时同步,最终可达到数据一致。

迁移数据为执行备份命令时间点的数据快照。

适用场景

对业务连续性要求高的生产核心系统。

开发测试环境、可接受长时间停机的业务、或一次性全量数据迁移。

操作复杂度

较高,涉及网络配置、DTS任务配置与监控。

较低,主要为命令行工具操作。

成本

需要支付DTS相关任务费用。

无工具费用,但业务停机可能带来部分成本。

使用DTS进行在线迁移

使用数据传输服务(DTS)完成从MongoDBPolarDB PostgreSQL的在线迁移。该过程包括结构迁移、全量数据迁移和增量数据迁移,可将业务停机时间缩短至分钟级。

操作流程概述

  1. 在目标端PolarDB PostgreSQL中创建用于迁移的专属账号。

  2. 登录DTS控制台,配置并启动数据迁移任务。

  3. 监控迁移任务状态,待增量数据同步无延迟后,执行业务切换。

  4. 验证业务并释放DTS任务。

步骤一:创建迁移账号

创建供DTS用于连接PolarDB PostgreSQL并写入数据的数据库账号,遵循最小权限原则。不可直接使用高权限账号与文档数据库专用账号

  1. 使用MongoDB客户端连接到PolarDB PostgreSQL集群的文档数据库。

  2. 执行以下命令创建账号。将命令中的<your_user><your_password> 替换为实际的用户名和密码。

    db.createUser({
      user: "<<your_user>>",
      pwd: "<<your_password>",
      roles: [
        { role: "readWrite" }
      ]
    })

    预期返回结果:

    { ok: 1 }

步骤二:创建并配置DTS迁移任务

配置从源MongoDB到目标PolarDB PostgreSQL的数据迁移链路,本文以云数据库MongoDB版副本集实例为例。

  1. 登录数据传输服务DTS控制台。在左侧导航栏中,单击数据迁移,并在页面左上角选择实例所属地域。

  2. 单击创建任务,进入任务配置页面。

  3. 配置源库及目标库。

    类别

    配置

    说明

    示例图片

    任务名称

    DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。

    image

    源库信息

    数据库类型

    根据源库的部署位置进行选择。本示例以NoSQL 数据库 > MongoDB为例介绍配置流程。

    说明

    若源或目标库为其他云平台的数据库,您还需要进行其他的准备工作

    接入方式

    选择云实例

    说明

    您可按实际业务需求调整。

    实例地区

    选择MongoDB实例所在地区。

    说明

    若源或目标库为其他云平台的数据库,您可以选择就近地区。

    是否跨阿里云账号

    您可按实际业务需求调整。本示例以不跨账号(同账号)为示例。

    架构类型

    您可按实际业务需求调整。本示例以副本集架构为示例。

    迁移方式

    选择Oplog

    实例ID

    选择账号下面的MongoDB实例。

    鉴权数据库名称

    填写鉴权数据库名称

    数据库账号

    填写MongoDB实例的账号。

    数据库密码

    填写MongoDB实例的密码。

    连接方式

    请根据MongoDB实例的实际情况,选择非加密连接SSL安全连接

    目标库信息

    数据库类型

    固定为NoSQL 数据库 > MongoDB

    image

    接入方式

    选择专线/VPN网关/智能网关

    实例地区

    选择PolarDB集群所在地区。

    已和目标端数据库联通的VPC

    选择PolarDB集群的专有网络VPC。

    架构类型

    固定为副本集架构,暂不支持分片集群架构

    连接地址类型

    固定为单节点

    域名或IP地址

    填写文档数据库私有地址

    端口

    填写文档数据库私有地址对应的端口,默认为5432。

    鉴权数据库名称

    填写postgres

    数据库账号

    填写步骤一创建的迁移账号

    数据库密码

    填写步骤一创建的迁移账号对应的密码。

    连接方式

    选择非加密连接

    VPC数据通道主备交换机

    选择DTS使用的VPC数据通道访问您的数据源:

    • 交换机(主):选择PolarDB集群所属的交换机。

    • 交换机(备):您可按实际业务需求进行选择。

  4. 单击测试连接以进行下一步。请将DTS服务器访问授权弹窗中的目标端IP地址添加到PolarDB集群的白名单中。点击确认授权并测试链接若无异常则自动跳转第二步配置任务对象。

    警告

    DTS自动添加或您手动添加DTS服务的公网IP地址段可能会存在安全风险,一旦使用本产品代表您已理解和确认其中可能存在的安全风险,并且需要您做好基本的安全防护,包括但不限于加强账号密码强度防范、限制各网段开放的端口号、内部各API使用鉴权方式通信、定期检查并限制不需要的网段,或者使用通过内网(专线/VPN网关/智能网关)的方式接入。

  5. 配置任务对象。

    1. 对象配置

      配置

      说明

      示例图片

      迁移类型

      勾选库表结构迁移全量迁移增量迁移

      image

      目标已存在表的处理模式

      • 预检查并报错拦截:检查目标端是否为空。如果待迁移的目标端为空,则通过该检查项目;如果不为空,则在预检查阶段提示错误,数据迁移作业不会被启动。

      • 忽略报错并继续执行:跳过目标库对象数据存在性检查的检查项。

        警告

        选择为忽略报错并继续执行后,如果在迁移过程中遇到目标端的Key与源端中的Key相同,会将源端的数据覆盖写入目标端中,从而可能会导致目标端原有的数据丢失,请谨慎选择。

      迁移对象

      源库对象框中单击待迁移的对象,然后单击向右小箭头将其移动到已选择对象框。

  6. 单击下一步高级配置,按照实际情况选择即可。

  7. 单击下一步数据校验,按照实际情况选择即可。

    说明

    若您需要进行数据校验,全量校验中可选择按表行数进行校验

  8. 预检查:单击页面右下角的下一步保存任务并预检查,等待检查完成。在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。

    说明

    如果预检查失败,单击具体检查项后的提示,查看失败详情。

    • 您可以根据提示修复后重新进行预检查。

    • 如无需修复告警检测项,您也可以选择确认屏蔽,跳过告警检测项重新进行预检查。

  9. 购买DTS实例:

    1. 在购买页面,选择链路规格并选中《数据传输(按量付费)服务条款》

    2. 单击购买并启动,迁移任务正式开始。

步骤三:监控任务并执行业务切换

在数据完全同步后,将业务应用切换至PolarDB数据库,完成迁移。

  1. 监控同步状态:返回DTS控制台,观察迁移任务的状态。任务会依次经历结构迁移、全量数据迁移和增量数据迁移。

  2. 业务切换:等待增量数据无延迟的时候,就可以进行实例切换。image

  3. 结束DTS任务:在PolarDB上平稳运行一段时间后,可在DTS控制台停止并释放迁移任务以节省相关费用。

使用mongodump/mongorestore进行离线迁移

此方法通过MongoDB官方工具进行全量备份和恢复,适用于可接受较长停机时间的场景。

步骤一:备份源端数据(mongodump)

在可连接到源MongoDB的服务器上,执行mongodump命令,从源MongoDB数据库创建全量数据备份。建议添加以下参数:

  • --uri:指定源数据库的连接字符串。

  • --oplog:在备份期间记录oplog,确保备份数据的一致性。

  • --out:指定备份文件的输出目录。

# 示例命令
mongodump --uri="mongodb://<username>:<password>@<source_ip>:<source_port>/<source_db>" --oplog --out /path/to/backup_dir/
说明

执行备份操作可能对源库性能产生影响,建议在业务低峰期进行。确保备份目录所在磁盘有足够空间。

步骤二:恢复数据至目标端(mongorestore)

将备份文件目录传输到可连接目标PolarDB集群的服务器上,然后执行mongorestore命令,将备份数据导入目标PolarDB集群。

# 推荐:省略密码,交互式输入
mongorestore --uri="mongodb://<username>@<polardb_endpoint>:<port>/<dest_db>" /path/to/backup_dir/
说明

为避免密码在命令行历史或进程列表中泄露,建议不在--uri参数中直接提供密码。执行命令后,系统会提示交互式的输入密码。

步骤三:验证数据

确认数据已完整与准确地恢复到目标数据库。连接到目标PolarDB集群,执行以下检查:

  • 检查集合数量:确认所有预期的集合都已创建。

  • 抽样检查文档内容:随机抽取几条文档,对比其内容是否与源端一致。