4.3 出云同步使用须知
4.3.4 MySQL->Oracle
使用技巧(需要人为配合)
推荐提前2-3天启动任务,并配合如下使用技巧和操作要求,以确保任务稳定运行。
● 基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行同步任务。
– 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,
以及占用2~4个CPU。
– 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
– DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数 对业务的影响。
– 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独 占锁操作。
● 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便 得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过 程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
操作要求
针对一些无法预知或人为因素及环境突变导致同步失败的情况,数据复制服务提供以 下常见的操作限制,供您在同步过程中参考。
表4-48 操作要求
类型名称 操作限制(需要人为配合)
注意事项 ● 表4-49中的环境要求均不允许在同步过程中修改,直至同步结
束。
● 不支持外键级联操作。
● 增量同步会过滤所有的DDL操作。
● 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重 试,表数据存在少量不一致的可能性。
● 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。
● 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建 同步任务。
● 支持目标数据库中的表比源数据库多列场景,但是需要避免以下 场景可能导致的任务失败。
– 目标端多的列要求非空且没有默认值,源端insert数据,同步 到目标端后多的列为null,不符合目标端要求。
– 目标端多的列设置固定默认值,且有唯一约束。源端insert多 条数据后,同步到目标端后多的列为固定默认值,不符合目标 端要求。
类型名称 操作限制(需要人为配合)
操作须知 ● 在任务启动、任务全量同步阶段,不建议对源数据库做DDL操作
● 同步过程中,不允许修改、删除连接源和目标数据库的用户的用 户名、密码、权限,或修改源和目标数据库的端口号。
● 增量同步场景下,不支持源数据库进行恢复到某个备份点的操作
(PITR)。
● 增量同步过程中,若源库存在分布式事务,可能会导致同步失 败。
● 为了保持数据一致性,不允许对正在同步中的目标数据库进行修 改操作(包括但不限于DDL操作)。
● 增量同步阶段,支持断点续传功能,在主机系统崩溃的情况下,
对于非事务性的无主键的表可能会出现重复插入数据的情况。
● 同步过程中,不允许源库写入binlog格式为statement的数据。
● 同步过程中,不允许源库执行清除binlog的操作。
● 选择表级对象同步时,增量同步过程中不支持对表进行重命名操 作。
● 同步过程中,不允许在源库创建库名为ib_logfile的数据库。
● 建议将expire_log_day参数设置在合理的范围,确保恢复时断点 处的binlog尚未过期,以保证服务中断后的顺利恢复。
● 源库时间字段默认值全0的统一转成1970-01-01 00:00:00
● 源库类型是decimal类型,精度超过38有效数字被截断补0,原因 是目标库对应的number类型的最大精度是38。
● 表字段名称全部转成大写
设置 ● 源数据库帐户需要具备如下权限: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,
类型名称 使用限制(DRS自动检查)
同步对象约
束 ● 全量同步支持数据、表结构和索引的同步。
● 增量同步仅支持数据同步。
● 不支持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的同步。
目标数据库
要求 ● 目标数据库实例的运行状态必须正常。
● 目标数据库实例必须有足够的磁盘空间。
4.3.5 DDM->MySQL
使用技巧(需要人为配合)
推荐提前2-3天启动任务,并配合如下使用技巧和操作要求,以确保任务稳定运行。
● 基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行同步任务。
– 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,
以及占用2~4个CPU。
– 同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。
– 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
– DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数 对业务的影响。
● 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建 同步任务。
● 数据类型不兼容时,可能引起同步失败。
● 目标库为RDS for MySQL实例时,不支持带有TDE特性并建立具 有加密功能表。
● 如果目标库MySQL不支持TLS1.2协议,或者为版本较低的自建库
(低于5.6.46或在5.7-5.7.28之间),需提交运维申请才能使用 SSL测试连接。
● 支持目标数据库中的表比源数据库多列场景,但是需要避免以下 场景可能导致的任务失败。
– 目标端多的列要求非空且没有默认值,源端insert数据,同步 到目标端后多的列为null,不符合目标端要求。
– 目标端多的列设置固定默认值,且有唯一约束。源端insert多
类型名称 操作限制(需要人为配合)
设置 ● 源物理分片数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、
REPLICATION CLIENT。
● 提供的目标数据库帐号必须拥有如下权限:SELECT、CREATE、
DROP、DELETE、INSERT、UPDATE。RDS for MySQL实例的 root帐户默认已具备上述权限。
同步对象约
束 ● 全量同步支持数据、表结构和索引的同步。
● 源库不允许存在拆分键为timestamp类型的表。
● 源表的分库分表键要加到目标表的主键和唯一键中(也就是目标 表的主键和唯一键中的列应该包含源表的分片列),避免数据冲 突出现数据不一致问题。
源数据库要
求 ● MySQL源数据库的binlog日志必须打开,且binlog日志格式必须 为Row格式。
● 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越 好,建议为3天。
● 增量同步时,必须设置MySQL源数据库的server_id。如果源数据 库版本小于或等于MySQL5.6,server_id的取值范围在2-
4294967296之间;如果源数据库版本大于或等于MySQL5.7,
server_id的取值范围在1-4294967296之间。
● 源分库分表中间件中的库名、表名不能包含:'<>/\以及非ASCII 字符。
● MySQL源数据库建议开启skip-name-resolve,减少连接超时的 可能性。
● 源数据库GTID状态建议为开启状态。
类型名称 使用限制(DRS自动检查)
目标数据库
要求 ● 目标数据库为自建MySQL。
● 目标数据库实例必须有足够的磁盘空间。
● 除了MySQL系统数据库之外,当目标库和源库同名时,目标数据 库中若存在与源库同名的表,则表结构必须与源库保持一致。
● 目标数据库的字符集必须与源数据库一致。
● 目标数据库的时区设置必须与源数据库一致。
● DRS同步时会有大量数据写入目标库,目标库
max_allowed_packet 参数过小会导致无法写入,建议将目标库 max_allowed_packet参数值设置为大于100MB。