更新时间:2024-04-15 GMT+08:00

将MySQL同步到Oracle

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

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

前提条件

  • 已登录数据复制服务控制台。
  • 满足实时同步支持的数据库类型和版本,详情请参见实时同步

使用建议

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

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

使用须知

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

  • 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。
  • 连接源或目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
表2 使用须知

类型名称

使用和操作限制

数据库权限设置

  • 源数据库账号需要具备如下权限:SELECT、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、RESOURCE角色。

同步对象约束

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

源数据库要求

  • 源数据库中的库名不能包含:'<`>/\"以及非ASCII字符。
  • 源数据库中的表名不能包含:'<>/\"以及非ASCII字符。
  • 源数据库中的库名或映射后的名称不允许以ib_logfile开头,也不能为ib_buffer_pool、ib_doublewrite、ibdata1、ibtmp1。
  • 增量同步时,MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
  • 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。设置为0,可能会导致同步失败。

    RDS for MySQL设置binlog保留时间可参考《RDS用户指南》。

  • 增量同步时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
  • 增量同步时,如果设置session变量character_set_client为binary,可能导致乱码。
  • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
  • 源数据库GTID状态必须为开启状态,源数据库实例没有开启GTID的情况下不支持主备倒换,DRS任务会因为位点不续接而中断导致无法恢复。
  • 源库不支持mysql binlog dump命令。
  • 源数据库和目标数据库字符集需保持一致,否则同步失败。
  • 源数据库log_slave_updates参数需设置为开启状态,否则会导致同步失败。
  • 源数据库的binlog_row_image参数需设置为FULL,否则会导致同步失败。
  • 源数据库MySQL8.0目前不支持参数lower_case_table_names等于0的同步。
  • 源数据库不支持选择只读实例。

目标数据库要求

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

操作须知

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

操作步骤

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

    • 任务信息
      表3 任务和描述

      参数

      描述

      任务名称

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

      描述

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

    • 同步实例信息
      表4 同步实例信息

      参数

      描述

      数据流动方向

      选择“出云”

      源数据库引擎

      选择“MySQL”

      目标数据库引擎

      选择“Oracle”

      网络类型

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

      • VPC网络:适合云上同账号同Region数据库之间的同步。
      • 公网网络:适合通过公网网络把其他云下或其他平台的数据库同步到目标数据库,该类型要求数据库绑定弹性公网IP(EIP)。
      • VPN、专线网络:适合通过专线网络,实现其他云下自建数据库与云上数据库同步、云上同Region跨账号、或云上跨Region的数据库之间的同步。

      源数据库实例

      源数据库的RDS for MySQL实例。

      同步实例所在子网

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

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

      同步模式

      • 全量+增量。

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

    对于创建失败的任务,DRS默认保留3天,超过3天将会自动结束任务。

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

    表5 源库信息

    参数

    描述

    数据库实例名称

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

    数据库用户名

    源数据库的用户名。

    数据库密码

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

    SSL安全连接

    如启用SSL安全连接,请在源库开启SSL,并确保相关配置正确后上传SSL证书。

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

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

    表6 目标库信息

    参数

    描述

    IP地址或域名

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

    说明:

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

    端口

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

    数据库服务名

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

    数据库用户名

    目标数据库的用户名。

    数据库密码

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

    SSL安全连接

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

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

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

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

    表7 同步模式和对象

    参数

    描述

    流速模式

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

    • 限速

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

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

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

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

    同步对象类型

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

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

    同步对象

    左侧框是源数据库对象,右侧框是已经选择的对象,支持表级同步和导入对象文件,您可以根据业务场景选择对应的数据进行同步。

    选择导入对象文件,具体步骤和说明可参考导入同步对象

    说明:
    • 选择对象的时候支持对展开的库进行搜索,以便您快速选择需要的数据库对象。
    • 如果有切换源数据库的操作或源库同步对象变化的情况,请在选择同步对象前单击右上角的,以确保待选择的对象为最新源数据库对象。
    • 当对象名称包含空格时,名称前后的空格不显示,中间如有多个空格只显示一个空格。
    • 选择的同步对象名称中不能包含空格。

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

    • 查看检查结果,如有不通过的检查项,需要修复不通过项后,单击“重新校验”按钮重新进行任务预校验。
    • 预检查完成后,且所有检查项结果均通过时,单击“下一步”

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

  6. “任务确认”页面,设置同步任务的启动时间,并确认同步任务信息无误后,单击“启动任务”,提交同步任务。

    表8 任务启动设置

    参数

    描述

    启动时间

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

    说明:

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

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

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。
    • 对于未启动、状态为配置中的任务,DRS默认保留3天,超过3天DRS会自动删除后台资源,当前任务状态不变。当用户再次配置时,DRS会重新申请资源,此时DRS任务IP会发生改变。