文档

DTS实现MySQL数据库之间的双向数据同步

更新时间:
一键部署

数据传输服务DTS(DataTransmission Service)支持两个MySQL数据库之间(比如RDS MySQL、自建MySQL)的双向数据实时同步,适用于异地多活(单元化)、数据异地容灾等多种应用场景。本文以RDS MySQL实例为例,介绍双向数据同步的配置步骤,其他数据源的配置流程与本案例类似。

前提条件

  • 已创建组织、资源集、用户账号等。

  • 已创建经典网络类型的RDS-MySQL实例A(源端)、经典网络类型的RDS-MySQL实例B(目的端)。

  • 源端实例已创建账号、数据库并写入测试数据。目的端需要建好账号。

  • 源端和目的端不可选择同一个实例。

背景信息

同步架构

本案例均以MySQL为例,数据传输服务DTS支持的双向数据实时同步架构如下图所示。同步架构

数据源

MySQL间的双向数据同步支持以下数据源。

源数据库

目的数据库

  • RDS MySQL实例。

  • ECS上的自建数据库。

  • 通过专线、VPN网关或智能网关接入的自建数据库。

  • RDS MySQL实例。

  • ECS上的自建数据库。

  • 通过专线、VPN网关或智能网关接入的自建数据库。

同步的MySQL操作

操作类型

SQL操作语句

DML

INSERTUPDATEDELETEREPLACE

DDL

  • ALTER TABLEALTER VIEW

  • CREATE FUNCTIONCREATE INDEXCREATE PROCEDURECREATE TABLECREATE VIEW

  • DROP INDEXDROP TABLE

  • RENAME TABLE

  • TRUNCATE TABLE

冲突检测

为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在双向同步的一个节点进行更新。如果同时更新则会按照您在数据同步作业中配置的冲突修复策略进行响应。

DTS通过冲突检测和修复能最大程度地维护双向同步实例的稳定性。目前DTS支持进行检测的冲突类型包括:

  • INSERT导致的唯一性冲突。同步INSERT语句时违背了唯一性约束。

    例如双向同步的两个节点同时或者在极为接近的时间,INSERT某个主键值相同的记录,那么同步到对端时,会因为已经存在相同的主键值记录,导致INSERT同步失败。

  • UPDATE更新的记录不完全匹配。

    • UPDATE要更新的记录在同步目标实例中不存在时,DTS会自动转化为INSERT,此时可能会出现唯一键的唯一性冲突。

    • UPDATE要更新的记录出现主键或唯一键冲突。

  • DELETE对应的记录不存在。DELETE要删除的记录在同步的目标实例中不存在。出现这种冲突时,不论配置何种冲突修复策略,DTS都会自动忽略DELETE操作。

组件介绍

  • 数据传输服务DTS

    数据传输服务DTS(DataTransmission Service)支持RDBMS、NoSQL、OLAP等数据源间的数据交互。集数据同步、迁移、订阅、集成、加工于一体,助您构建安全、可扩展、高可用的数据架构。

  • 云数据库RDS(MySQL)

    阿里云关系型数据库RDS(RelationalDatabase Service)是一种稳定可靠、可弹性伸缩的在线数据库服务。基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL、SQL Server、PostgreSQL、PPAS(PostgreSQL Advanced Server,高度兼容Oracle数据库)和MariaDB TX引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。

操作步骤

  1. 创建并配置同步作业。

    1. 使用管理员账号登录Apsara Uni-manager运营控制台(ASCM)。在顶部导航栏选择产品>数据传输服务 DTS,进入数据传输服务跳转页面。

    2. 数据传输服务跳转页面,选择组织地域后,单击管理员权限访问,进入数据传输服务DTS控制台。

    3. 数据传输页面左侧导航栏选择数据同步,进入同步作业列表页面。在同步作业列表页面右上角单击创建同步作业,在创建DTS实例对话框中,源实例类型选择MySQL目标实例类型选择MySQL同步架构选择双向同步,单击创建对话框

    4. 同步作业列表页面找到上一步创建的同步作业,单击目标同步作业操作栏的配置同步链路,进入创建同步作业页面。

      1. 选择同步通道的源及目标步骤的源实例信息中,实例类型选择RDS实例实例ID选择目标源RDS实例的ID。

      2. 选择同步通道的源及目标步骤的目标实例信息中,实例类型选择RDS实例实例ID选择目标源RDS实例的ID。1选择同步通道的源及目标步骤中相关配置说明如下表。

        类别

        配置

        说明

        同步作业名称

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

        源实例信息

        实例类型

        选择RDS实例。

        实例地区

        购买数据同步实例时选择的源实例地域信息,不可变更。

        实例ID

        选择作为数据同步源的RDS实例ID。

        数据库账号

        填入源RDS的数据库账号。

        数据库密码

        填入数据库账号对应的密码。

        连接方式

        根据需求选择非加密连接或SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能。

        目标实例信息

        实例类型

        选择RDS实例。

        实例地区

        购买数据同步实例时选择的目标实例地域信息,不可变更。

        实例ID

        选择作为数据同步目标的RDS实例ID。

        数据库账号

        填入目标RDS的数据库账号。

        数据库密码

        填入数据库账号对应的密码。

        连接方式

        根据需求选择非加密连接或SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能。

      3. 单击授权白名单并进入下一步

      4. 等待创建同步账号进度达到100%,单击下一步,可以看到源端实例的库的列表和选择的双列表框。

        1

    5. DML同步类型选择InsertDelete、和Update。在左侧列表框中选择要迁移的库表后,单击向右的箭头。单击右侧列表框的编辑按钮,配置源和目标实例的对象名映射及迁移列选择。单击下一步,完成任务配置。1

  2. 同步前预检查。

    1. 创建同步作业页面的高级设置步骤中,同步初始化勾选结构初始化全量数据初始化。单击预检查并启动,可以看到预检查的页面。1

    2. 预检查成功后单击关闭,在同步任务列表中可以看到正在运行的任务。当任务状态由同步初始化中转为同步中,在云数据库实例基本信息中,可以将同步DB的读写权限授权给账号。11

    3. 检查源端的数据是否已同步到目的端。

      当任务状态为同步中时,在源端选择同步的表中写一条数据,源库中已有的数据和新写入的数据都已同步到目的库为同步正常(注意:DTS系统自建的账号dtssyncwriter,在同步过程中不要删除)。

  3. 配置反向同步。

    1. 同步作业列表页面,在目标作业名称的操作栏中,单击配置同步链路,在弹出的提示对话框中,单击配置冲突修复策略。在配置冲突修复策略对话框中,选择相应策略内容后,单击确认,完成冲突策略配置。111

    2. 再次单击配置同步链路,在创建同步作业页面的选择同步通道的源及目标实例步骤中,确认源端和目的端实例无误后,单击授权白名单并进入下一步,进入下一步配置页面。1

    3. 选择需要同步的对象,单击下一步按钮,进入后续配置步骤。1配置说明如下表所示。

      类别

      配置

      说明

      同步策略配置

      是否过滤DDL

      • 否:同步DDL操作。

      • 是:不同步DDL。

      DML同步类型

      选择需要同步的DML类型,默认为Insert、Update、Delete,您可以根据业务需求调整。

      冲突修复策略

      选择同步冲突的修复策略,默认为TaskFailed,您可以根据业务情况选择合适的冲突修复策略。

      • TaskFailed(遇到冲突,任务报错退出) 默认的冲突修复策略。当数据同步遇到上述冲突类型时,同步任务直接报错并退出,同步任务进入失败状态,需要用户介入修复任务。

      • Ignore(遇到冲突,直接使用目标实例中的冲突记录)当数据同步遇到上述的冲突类型时,直接跳过当前同步语句,继续往下执行,选择使用目标库中的冲突记录。

      • Overwrite(遇到冲突,直接覆盖目标实例中的冲突记录) 当数据同步遇到上述的冲突类型时,直接覆盖目标库中的冲突记录。

      目标已存在表的处理模式

      • 预检查并报错拦截:检查目标库中是否有同名的表。如果目标库中没有同名的表,则通过该检查项目;如果目标库中有同名的表,则在预检查阶段提示错误,数据同步作业不会被启动。

      • 忽略报错并继续执行:跳过目标库中是否有同名表的检查项。

      选择同步对象

      在源库对象框中单击待同步的对象(选择粒度为库或表),单击 > 将其移动到已选择对象框。

      映射名称更改

      如需更改同步对象在目标实例中的名称,请使用对象名映射功能。

    4. 检查高级设置,单击预检查并启动,进入任务预检阶段。1

    5. 预检查页面,预检查成功后单击关闭,等待任务运行。待双向状态都为同步中,即双向同步配置成功。1

    6. 登录源端和目标端数据库。分别在一端做写入操作,另一端做查询操作,确认目标端的变更可以同步到源端(源端和目标端的操作账号均需要同步库的读写权限)。

  4. 确认同步任务启动、停止功能正常。

    1. 选择目标同步任务,单击暂停同步。在暂停同步的对话框中,单击确定,暂停该同步任务。1

    2. 当同步任务状态为已暂停时,按同步任务的方向写入数据。此时目标端应无数据同步。1

    3. 选择暂停的同步任务,单击右侧操作栏中的启动任务(也可以通过DTS运维平台重启该任务)。在启动同步对话框中,单击启动同步。启动同步任务。1

    4. 当任务状态为同步中时,连接目标端查询数据,任务暂停期间源端写入的数据应已正常同步到目的端。1

  5. 全量校验。

    1. 登录Apsara Uni-manager运维控制台(ASO),在左侧导航栏中选择产品运维管理

    2. 产品运维管理页面左侧导航栏中,单击产品列表。在产品列表页面单击DTS

    3. 任务列表中,单击状态为运行中任务的任务名称,进入任务详情1

    4. 任务详情页面,单击右上角的全量校验,打开全量校验配置页面,调整相关信息,单击确定。全量校验完成后,结果信息将在全量校验监控显示。11

  • 本页导读
文档反馈