将MySQL同步到MySQL 本节主要介绍将MySQL同步到MySQL 支持的源和目标数据库 表 支持的数据库 源数据库 目标数据库 :: RDS for MySQL 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 RDS for MySQL 前提条件 已登录数据复制服务控制台。 满足实时同步支持的数据库类型和版本,详情请参见实时同步。 使用建议 注意 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。如果同步不可避免业务高峰期,推荐使用同步限速功能,即“流速模式”选择“限速”。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。 DRS并发读取数据库,会占用大约610个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。 如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。 使用须知 在创建同步任务前,请务必阅读以下使用须知。 表 使用须知 类型名称 使用和操作限制 :: 数据库权限设置 源数据库账号需要具备如下权限: SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 提供的目标数据库账号必须拥有如下权限: SELECT、CREATE、INDEX、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES。当目标库为8.0.148.0.18版本时,还需要有SESSIONVARIABLESADMIN权限。 同步对象约束 支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步,不支持事件、触发器的同步。 库映射时源库中不允许存在存储过程、视图、函数对象。 映射的库中不允许存在除表外的对象且在同步过程中不允许创建这些对象,否则会导致同步任务失败。 不支持非MyISAM和非InnoDB表的同步。 已选择的表与未选择的表之间互相rename的DDL操作,在任务同步中会被过滤掉,可能会导致任务失败或数据不一致。 − 对于一个DDL中存在一个rename的情况(例如:rename A TO B),只支持rename前后库表都在已选择库表中的rename操作(A和B都在已选择库表中),其他情况的rename DDL会被过滤; − 对于一个DDL中存在多个rename的情况(例如:rename A TO B, B TO C),只支持rename前后库表都在已选择库表中的部分rename操作 ,其他情况的rename DDL会被过滤(A和B在已选择库表中,C不在,仅执行rename A TO B)。 − 不建议在多对一同步场景下的进行rename操作,可能会导致任务失败或数据不一致。 源数据库要求 源数据库中的库名不能包含:' /"以及非ASCII字符。 源数据库中的表名、视图名不能包含:'<>/"以及非ASCII字符。 源数据库中的库名和库映射的名称不允许为iblogfile。 MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。 源数据库expirelogsdays参数值为0,可能会导致同步失败。 增量同步时,必须设置MySQL源数据库的serverid。如果源数据库版本小于或等于MySQL5.6,serverid的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,serverid的取值范围在1-4294967296之间。 目标数据库要求 不支持从高版本同步到低版本。 目标数据库必须有足够的磁盘空间。 目标数据库的字符集必须与源数据库一致。 目标数据库的时区设置必须与源数据库一致。 除了MySQL系统数据库之外,当目标库和源库同名时,目标数据库中若存在与源库同名的表,则表结构必须与源库保持一致。 DRS同步时会有大量数据写入目标库,目标库maxallowedpacket 参数过小会导致无法写入,建议将目标库maxallowedpacket参数值设置为大于100MB。 同步的对象中包含引擎为MyISAM的表,则目标数据库sqlmode不能包含noenginesubstitution参数,否则可能会导致同步失败。 映射到目标库中的库名不能包含:“.”、 “ ”、“”、和“'”。 操作须知 相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数/触发器引用视图/表、主外键关联表等。 当前仅MySQL>MySQL的同步支持多对一任务同步,进行表级多对一同步时,源库不允许存在无主键表。 源库和目标库是相同的RDS实例时,不支持没有库映射的实时同步。 源库不允许存在与目标库同名的无主键表。 源库和目标库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。 如果目标库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.75.7.28之间),需提交运维申请才能使用SSL测试连接。 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 − 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 − 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 不支持源数据库恢复到之前时间点的操作(PITR)。 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。 不支持外键级联操作。 不支持强制清理binlog,否则会导致同步任务失败。 建议将expirelogday参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。 创建同步任务时,不允许将目标库设为只读。 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,需要在数据复制服务控制台将上述信息重新修改正确,然后重试任务可继续进行实时同步。一般情况下不建议在同步过程中修改上述信息。 实时同步过程中,如果修改了源库或者目标库端口,会导致同步任务失败。针对该情况,数据复制服务提供不同的处理机制。 − 对于源库端口,需要在数据复制服务控制台修改为正确的端口,然后重试任务可继续进行实时同步。 − 对于目标库端口,系统自动更新为正确的端口,需要重试任务即可进行同步。 一般情况下不建议在同步过程中修改端口。 为了保持数据一致性,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 当在全量同步过程中,对MyISAM表执行修改操作时,可能造成数据不一致。 增量同步支持表的重命名,源表和目标表必须都在对象选择里。 增量同步支持任务再编辑追加同步对象。