更新时间:2022-05-20 GMT+08:00
分享

将MySQL同步到Oracle

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • RDS for MySQL
  • 本地自建数据库
  • ECS自建数据库

前提条件

  • 已登录数据复制服务控制台。
  • 账户余额大于等于0元。
  • 满足实时同步支持的数据库类型和版本,详情请参见支持的数据库
  • 当用户创建DRS任务使用的是子帐号时,请先确认已添加过委托。创建委托方法,可参考委托管理

使用建议

  • DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。
  • 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。
  • 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。
  • 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。
    • 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。
    • 同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。
    • 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
    • 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。
    • DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。
    • 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。
    • 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响
  • 数据对比

    建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。

使用须知

在创建同步任务前,请务必阅读以下使用须知。

表2 使用须知

类型名称

使用和操作限制

数据库权限设置

  • 源数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
  • 提供的目标数据库账号必须具有每张表的如下权限:

    ALTER ANY INDEX,ALTER ANY TABLE, ALTER SESSION, ANALYZE ANY, COMMENT ANY TABLE, CREATE ANY INDEX, CREATE ANY TABLE, CREATE SESSION, DELETE ANY TABLE, DROP ANY TABLE, INSERT ANY TABLE, SELECT ANY TABLE, SELECT ANY DICTIONARY, SELECT ANY TRANSACTION, UPDATE ANY TABLE

同步对象约束

  • 全量同步支持数据、表结构和索引的同步。
  • 增量同步仅支持数据同步。
  • 不支持geometry,geometrycollection,linestring,multilinestring,multipoint,point,polygon等地理坐标类型
  • 不支持视图、约束、函数、存储过程、触发器(TRIGGER)和事件(EVENT)的同步。
  • 不支持系统库的同步以及事件状态的同步。
  • 目标库Oracle不支持空字符串,同步对象含有非空约束的字段中不能包含空字符串。

源数据库要求

  • 源数据库中的库名不能包含:'<`>/\"以及非ASCII字符。
  • 源数据库中的表名不能包含:'<>/\"以及非ASCII字符。
  • 源数据库中的库名不允许为ib_logfile。
  • MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
  • 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。
  • 源数据库expire_logs_days参数值为0,可能会导致同步失败。
  • 增量同步时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
  • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
  • 源数据库GTID状态建议为开启状态。
  • 源库不支持mysql binlog dump命令。
  • 源数据库和目标数据库字符集需保持一致,否则同步失败。
  • 源数据库log_slave_updates参数需设置为开启状态,否则会导致同步失败。
  • 源数据库的binlog_row_image参数需设置为FULL,否则会导致同步失败。
  • 源数据库MySQL8.0目前不支持参数lower_case_table_names等于0的同步。

目标数据库要求

  • 目标数据库实例的运行状态必须正常。
  • 目标数据库实例必须有足够的磁盘空间。

操作须知

  • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
  • 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。
  • 由于数据库引擎支持不同,MySQL中的非空约束支持空字符串,Oracle中的非空约束不支持空字符串。数据同步过程中,如果非空约束的字段出现了空字符串,建议用户在目标端Oracle中将这个非空约束删除。
  • 源库时间字段默认值全0的统一转成1970-01-01 00:00:00
  • 源库类型是decimal类型,精度超过38有效数字被截断补0,原因是目标库对应的number类型的最大精度是38。
  • 源库表中类型为varbinary、binary、timestamp的字段不能含有主键或唯一键约束。
  • 表字段名称全部转成大写
  • 不支持外键级联操作。
  • 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。
  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。
    • 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。
  • 在任务启动、任务全量同步阶段,不建议对源数据库做DDL操作
  • 为了保持数据一致性,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL操作)。
  • 同步过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 同步过程中,不允许源库写入binlog格式为statement的数据。
  • 同步过程中,不允许源库执行清除binlog的操作。
  • 同步过程中,不允许在源库创建库名为ib_logfile的数据库。
  • 增量同步场景下,不支持源数据库进行恢复到某个备份点的操作(PITR)。
  • 增量同步过程中,若源库存在分布式事务,可能会导致同步失败。
  • 增量同步会过滤所有的DDL操作。
  • 增量同步阶段,支持断点续传功能,在主机系统崩溃的情况下,对于非事务性的无主键的表可能会出现重复插入数据的情况。
  • 选择表级对象同步时,增量同步过程中不支持对表进行重命名操作。
  • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。

操作步骤

  1. 在“实时同步管理”页面,单击“创建同步任务”。
  2. 在“同步实例”页面,填选区域、任务名称、描述、同步实例信息,单击“下一步”。

    图1 同步任务信息
    表3 任务和描述

    参数

    描述

    区域

    当前所在区域,可进行切换。

    任务名称

    任务名称在4-50位之间,必须以字母开头,不区分大小写,可以包含字母、数字、中划线或下划线,不能包含其他的特殊字符。

    描述

    描述不能超过256位,且不能包含! = < > & ' " \ 特殊字符。

    图2 同步实例信息
    表4 同步实例信息

    参数

    描述

    数据流动方向

    选择“出云”

    源数据库引擎

    选择“MySQL”

    目标数据库引擎

    选择“Oracle”

    网络类型

    此处以“公网网络”为示例。目前支持可选公网网络、VPC网络、VPN网络和专线网络。

    源数据库实例

    源数据库的RDS for MySQL实例。

    同步实例所在子网

    请选择同步实例所在的子网。也可以单击“查看子网”,跳转至“网络控制台”查看实例所在子网帮助选择。

    默认值为当前所选数据库实例所在子网,请选择有可用IP地址的子网。为确保同步实例创建成功,仅显示已经开启DHCP的子网。

    同步类型

    • 全量+增量。

      该模式为数据持续性实时同步,通过全量过程完成目标端数据库的初始化后,增量同步阶段通过解析日志等技术,将源端和目标端数据保持数据持续一致。

    企业项目

    对于已成功关联企业项目的用户,仅需在“企业项目”下拉框中选择目标项目。

    如果需要自定义企业项目,请前往项目管理服务进行创建。关于如何创建项目,详见《项目管理用户指南》。

    标签

    • 可选配置,对同步任务的标识。使用标签可方便管理您的任务。每个任务最多支持10个标签配额。
    • 任务创建成功后,您可以单击任务名称,在“标签”页签下查看对应标签。关于标签的详细操作,请参见标签管理

  3. 在“源库及目标库”页面,同步实例创建成功后,填选源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议,单击“下一步”

    图3 源库信息
    表5 源库信息

    参数

    描述

    数据库实例名称

    默认为创建迁移任务时选择的关系型数据库实例,不可进行修改。

    数据库用户名

    源数据库的用户名。

    数据库密码

    源数据库的用户名所对应的密码。

    源数据库的数据库用户名和密码,会被系统加密暂存,直至删除该迁移任务后自动清除。

    图4 目标库信息
    表6 目标库信息

    参数

    描述

    IP地址或域名

    目标数据库的IP地址或域名。

    说明:

    对于RAC集群,建议使用scanip接入,提高访问性能。

    端口

    目标数据库服务端口,可输入范围为1~65535间的整数。

    数据库服务名

    数据库服务名(Service Name/SID),客户端可以通过其连接到Oracle,具体查询方法请参照界面提示。

    数据库用户名

    目标数据库的用户名。

    数据库密码

    目标数据库的用户名所对应的密码。

    SSL安全连接

    通过该功能,用户可以选择是否开启对迁移链路的加密。如果开启该功能,需要用户上传SSL CA根证书。

    说明:
    • 最大支持上传500KB的证书文件。
    • 如果不使用SSL证书,请自行承担数据安全风险。

    目标库的数据库用户名和密码,会被系统加密暂存,直至删除该迁移任务后自动清除。

  4. “设置同步”页面,选择同步策略和同步对象,单击“下一步”

    图5 同步模式
    表7 同步模式和对象

    参数

    描述

    流速模式

    流速模式支持限速和不限速,默认为不限速。

    • 限速

      自定义的最大同步速度,全量同步过程中的同步速度将不会超过该速度。

      当流速模式选择了“限速”时,你需要通过流速设置来定时控制同步速度。流速设置通常包括限速时间段和流速大小的设置。默认的限速时间段为全天限流,您也可以根据业务需求自定义时段限流。自定义的时段限流支持最多设置3个定时任务,每个定时任务之间不能存在交叉的时间段,未设定在限速时间段的时间默认为不限速。

      流速的大小需要根据业务场景来设置,不能超过9999MB/s。

      图6 设置流速模式
    • 不限速
      对同步速度不进行限制,通常会最大化使用源数据库的出口带宽。该流速模式同时会对源数据库造成读消耗,消耗取决于源数据库的出口带宽。比如源数据库的出口带宽为100MB/s,假设高速模式使用了80%带宽,则同步对源数据库将造成80MB/s的读操作IO消耗。
      说明:
      • 限速模式只对全量阶段生效,增量阶段不生效。
      • 您也可以在创建任务后修改流速模式。具体方法请参见修改流速模式

    同步对象类型

    可选同步表结构、同步数据、同步索引,根据实际需求进行选择要同步内容。

    • 同步数据为必选项。
    • 选择同步表结构的时候目标库不能有同名的表。
    • 不选同步表结构的时候目标库必须有相应的表,且要保证表结构与所选表结构相同。

    同步对象

    支持表级同步、库级同步和导入对象文件,您可以根据业务场景选择对应的数据进行同步。

    • 选择数据的时候支持搜索,以便您快速选择需要的数据库对象。
    • 如果有切换源数据库的操作,请在选择同步对象前单击右上角的,以确保待选择的对象为最新源数据库对象。
    • 选择导入对象文件,具体步骤和说明可参考导入同步对象

  5. “预检查”页面,进行同步任务预校验,校验是否可进行。

    • 查看检查结果,如有不通过的检查项,需要修复不通过项后,单击“重新校验”按钮重新进行任务预校验。

      预检查不通过项处理建议请参见《数据复制服务用户指南》中的“预检查不通过项修复方法”。

    • 预检查完成后,且所有检查项结果均通过时,单击“下一步”
      图7 预检查

      所有检查项结果均通过时,若存在请确认项,需要阅读并确认详情后才可以继续执行下一步操作。

  6. “任务确认”页面,设置同步任务的启动时间、任务异常通知设置、SMN主题、时延阈值、任务异常自动结束时间,并确认同步任务信息无误后,勾选协议,单击“启动任务”,提交同步任务。

    图8 任务启动设置
    表8 任务启动设置

    参数

    描述

    启动时间

    同步任务的启动时间可以根据业务需求,设置为“立即启动”或“稍后启动”。

    说明:

    预计同步任务启动后,会对源数据库和目标数据库的性能产生影响,建议选择业务低峰期,合理设置同步任务的启动时间。

    任务异常通知设置

    该项为可选参数,开启之后,选择对应的SMN主题。当同步任务状态异常时,系统将发送通知。

    SMN主题

    “任务异常通知设置”项开启后可见,需提前在SMN上申请主题并添加订阅。

    SMN主题申请和订阅可参考《消息通知服务用户指南》

    时延阈值

    在增量同步阶段,源数据库和目标数据库之间的同步有时会存在一个时间差,称为时延,单位为秒。

    时延阈值设置是指时延超过一定的值后(时延阈值范围为0—3600s),DRS可以发送告警通知。告警通知将在时延稳定超过设定的阈值6min后发送,避免出现由于时延波动反复发送告警通知的情况。

    说明:
    • 当时延阈值设置为0时,不会发送通知给收件人。
    • 首次进入增量同步阶段,会有较多数据等待同步,存在较大的时延,属于正常情况,不在此功能的监控范围之内。
    • 设置时延阈值之前,需要设置任务异常通知。

    任务异常自动结束时间(天)

    设置任务异常自动结束天数,输入值必须在14-100之间,默认值14。

    说明:

    异常状态下的任务仍然会计费,而长时间异常的任务无法续传和恢复。设置任务异常自动结束天数后,异常且超时的任务将会自动结束,以免产生不必要的费用。

  7. 同步任务提交后,您可在“管理”页面,查看并管理自己的任务。

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。

分享:

    相关文档

    相关产品

close