使用限制
限制
- 仅支持 MySQL 5.6/5.7 版本
- 仅支持 InnoDB 引擎
- 仅支持以下字符集:
- latin1
- latin2
- gb2312, gbk, gb18030
- utf8, utf8mb4
- utf32
- binary
- 在latin1/2表中,不支持非latin字符(如中文)(#388)
- 对于非UTF8编码执行的DDL,不支持DDL中含有混合编码字符串,如
(col varchar default _utf32"...")
- binlog 仅支持
row
模式 - binlog image 仅支持
FULL
模式 - 源端和目标端大小写敏感配置 (
lower_case_table_names
) 需保持一致 - 需要开启 GTID
- 不支持 Trigger
- 暂不支持 View
- 支持procedure,function,event的增量部分迁移(须创建库级别的迁移job),但存在源端与目标端字符集不完全一致的问题#357
- 支持user增量部分的迁移(须创建实例级别的迁移job),且支持grant,revoke(要求回放用户有
grant option
) - 支持MySQL认证方式
mysql_native_password
(MySQL 5.7)和caching_sha2_password
(MySQL 8.0),其他认证方式不详 - 在dtle的增量复制过程中,如果源端执行
replace into
语句或者执行产生Duplicate entry冲突insert语句,可能导致目标端的AUTO_INCREMENT
值和源端不一致(MySQL Bug#83030)
源端 MySQL 需配置如下参数
参数 | 值 | 检查方式 |
---|---|---|
log_bin |
ON (my.cnf中填写合法文件名) | show global variables like 'log_bin' |
binlog_format |
ROW | show global variables like 'binlog_format'; |
binlog_row_image |
FULL | show global variables like 'binlog_row_image'; |
log_slave_updates |
ON | show global variables like 'log_slave_updates'; |
gtid_mode |
ON | show global variables like 'gtid_mode'; |
- 对于
lower_case_table_names
参数, dtle支持的值为0
或1
。- 原则上要求源端和目标端设置相同。
- 且job存续期间,MySQL上该参数的值不可改变。
- 允许设置参数值
2
, 但不支持大小写混用。
关于外键 (foreign key)
在3.21.10.0以前,dtle回放时会设置set @@foreign_key_checks=OFF
。外键的级连操作(如on update cascade)将无法生效。
从3.21.10.0开始,dtle增量回放时,默认set @@foreign_key_checks=ON
。可以触发外键级连操作。
对于存在外键关系的一系列表,需要这些表在同一个job的复制范围内,才能正常执行。
该行为可用job配置中dest部分ForeignKeyChecks
控制,默认为true。如有必要,可将其设为false。
涉及外键引用父表的事务,回放时会单独回放,不能并行。
遗留问题:在外键子表上alter table drop foreign key
后,原外键父表依然会被认为是外键父表。