MySQL->RDS for MySQL
使用技巧(需要人为配合)
推荐提前2-3天启动任务,并配合如下使用技巧和操作要求,以确保任务稳定运行。
基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行同步任务。
全量同步会对源数据库增加50MB/s的查询压力,以及2~4个核的CPU压力。
同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。
正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。
建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
如果涉及多对一场景的同步任务,可参考多对一的场景约束及操作建议。
如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。
操作要求
针对一些无法预知或人为因素及环境突变导致同步失败的情况,数据库复制服务提供以下常见的操作限制,供您在同步过程中参考。
表 操作要求
类型名称
操作限制(需要人为配合)
注意事项
环境要求均不允许在同步过程中修改,直至同步结束。
相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数/触发器引用视图/表、主外键关联表等。
不支持源数据库恢复到之前时间点的操作(PITR)。
支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。
创建同步任务时,不允许将目标库设为只读。
当前仅MySQL->MySQL的同步支持多对一任务同步,进行表级多对一同步时,源库不允许存在无主键表。
源库和目标库是相同的RDS实例时,不支持没有库映射的实时同步。
源库不允许存在与目标库同名的无主键表。
不支持目标数据库恢复到全量同步时间段范围内的PITR操作。
不支持外键级联操作。
进行多对一同步任务时,若多个同步任务同步同一张表,则在任务启动之后,系统会自动创建一个父任务来关联多个同步任务,父任务的命名规则为“DRS-Group-(目标库实例名)”。
若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
源库和目标库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。
操作须知
实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,需要在数据库复制服务控制台将上述信息重新修改正确,然后重试任务可继续进行实时同步。一般情况下不建议在同步过程中修改上述信息。
实时同步过程中,如果修改了源库或者目标库端口,会导致同步任务失败。针对该情况,数据库复制服务提供不同的处理机制。
对于源库端口,需要在数据库复制服务控制台修改为正确的端口,然后重试任务可继续进行实时同步。
对于目标库端口,系统自动更新为正确的端口,需要重试任务即可进行同步。一般情况下不建议在同步过程中修改端口。
实时同步过程中,如果源库为非本云关系型数据库实例,不支持修改IP地址。如果是本云关系型数据库实例,对于因修改IP地址导致同步任务失败的情况,系统自动更新为正确的IP地址,需要重试任务可继续进行同步。一般情况下,不建议修改IP地址。
不支持强制清理binlog,否则会导致同步任务失败。
当在全量同步过程中,对MyISAM表执行修改操作时,可能造成数据不一致。
全量同步过程中不支持DDL操作。
表级同步时,增量同步过程中只支持表的DDL操作。
表级同步时,增量同步过程中不建议对表进行重命名操作。
表级同步时,增量同步过程支持使用Online DDL,可参考DRS实时同步支持使用Online DDL工具。
建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
环境要求
实时同步对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
表 环境要求
类型名称
使用限制(DRS自动检查)
数据库权限设置
源数据库帐户需要具备如下权限:
SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
提供的目标数据库帐号必须拥有如下权限:
SELECT、CREATE、DROP、DELETE、INSERT、UPDATE。
RDS for MySQL实例的root帐户默认已具备上述权限。
同步对象约束
支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步,不支持事件、触发器的同步。
库映射时源库中不允许存在存储过程、视图、函数对象。
映射的库中不允许存在除表外的对象且在同步过程中不允许创建这些对象,否则会导致同步任务失败。
不支持非MyISAM和非InnoDB表的同步。
不支持已选择的表与未选择的表之间互相rename的DDL操作,否则会导致同步任务失败。
源数据库要求
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之间。
源数据库中的库名不能包含:'<`>/\"以及非ASCII字符。
源数据库中的表名、视图名不能包含:'<>/\"以及非ASCII字符。
源数据库中的库名和库映射的名称不允许为ib_logfile。
不支持非MyISAM和非InnoDB的表同步到RDS。
数据库映射时,源库中存在视图、存储过程等对象,可能会导致实时同步失败。
目标数据库要求
目标数据库实例的运行状态必须正常,若数据库实例是主备实例,复制状态也必须正常。
目标数据库实例必须有足够的磁盘空间。
除了MySQL系统数据库之外,当目标库和源库同名时,目标数据库中若存在与源库同名的表,则表结构必须与源库保持一致。
目标数据库的字符集必须与源数据库一致。
目标数据库的时区设置必须与源数据库一致。
DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。
同步的对象中包含引擎为MyISAM的表,则目标数据库sql_mode不能包含no_engine_substitution参数,否则可能会导致同步失败。
映射到目标库中的库名不能包含:“.”、 “<”、“>”、“”、和“'”。