二、支持的版本
| 类型 | 支持版本 |
| 自建 MySQL | 5.6.x / 5.7.x / 8.0.x / 8.1.x / 8.2.x / 8.3.x / 8.4.x |
| 腾讯云数据库 MySQL | 5.6 / 5.7 / 8.0 |
三、读取能力
| 能力 | 支持情况 | 说明 |
| 离线同步(读 / 写) | ✓ / – | 支持作为离线同步任务的源端读取数据;DataBuddy 数据源仅支持接入读取,不支持写入 |
| 实时同步(读 / 写) | ✓ / – | 支持作为实时同步任务的源端读取整库数据变更;DataBuddy 数据源仅支持接入读取,不支持写入 |
| 分库分表同步(读 / 写) | ✓ / ✗ | 支持以分库分表方式读取多个分表数据;DataBuddy 数据源仅支持接入读取,不支持写入 |
完整数据源能力对照参见 支持的数据源与读取能力。
五、实时同步限制
| 限制项 | 说明 |
| Binlog 格式 | 仅支持 ROW 格式 |
| binlog_row_image | 必须设置为 FULL |
| Binlog 保留时间 | 建议至少保留 72 小时;全量数据量越大需保留越长 |
| 无主键表 | 无主键表无法保证 exactly-once 语义,可能存在数据重复 |
| XA 事务 | 不支持 XA ROLLBACK,需手动处理相关表 |
| 只读库 | 不支持 5.6.x 以下版本的只读库实例 |
| Functional Index | 不支持包含 Functional Index 的表(MySQL 8.0 新特性) |
| 级联删除 | 不支持同步级联删除的关联表记录 |
| 存储过程、物化视图 | 不支持读取 |
| SET 数据类型 | 实时同步不支持 |
| 在线 DDL 工具 | 仅支持 gh-ost,不支持其他 DDL 在线变更工具 |
六、离线同步限制
| 限制项 | 说明 |
| 分表同步并发 | 多表同步切分单表时,任务并发数需大于表个数 |
| 存储过程 | 不支持读取 |
七、支持的字段类型
完整字段类型请参见 MySQL 产品文档。以下是 DataBuddy 在不同链路上的支持情况(节选 MySQL 8.0.x)。
| 字段类型 | 离线读 | 实时读 |
| TINYINT / TINYINT UNSIGNED | ✅ | ✅ |
| SMALLINT / MEDIUMINT / INT / BIGINT(含 UNSIGNED) | ✅ | ✅ |
| FLOAT / DOUBLE / DECIMAL / NUMERIC | ✅ | ✅ |
| REAL | ✅ | ✅ |
| CHAR / VARCHAR / TEXT 系列 | ✅ | ✅ |
| JSON | ✅ | ✅ |
| BINARY / VARBINARY / BLOB 系列 | ✅ | ✅ |
| DATE / TIME / DATETIME / TIMESTAMP / YEAR | ✅ | ✅ |
| BIT / BOOL / BOOLEAN / ENUM | ✅ | ✅ |
| SET | ✅ | ❌ |
| GEOMETRY / POINT | ✅ | ✅ |
| LINESTRING / POLYGON / MULTIPOINT 等空间类型 | ✅ | ❌ |
注意:说明:
注意:空间类型(GEOMETRY 系列)按二进制读取,不解析几何语义;如需在目标端保留几何信息,建议先在源端转换为字符串类型。
八、字段类型映射(离线同步)
同步时源端字段类型会转换为 DataBuddy 内部类型(同步链路中的中间类型)。配置任务前请重点核对「备注」列标注的类型,避免精度丢失或语义变化。
| 源端类型 | DataBuddy 内部类型 | 备注 |
| BIT / BOOL / BOOLEAN | Boolean | BIT(n) 默认按布尔值读取;开启 useBitPrecision 且精度大于 1 时按 Bytes 读取 |
| TINYINT(1) | Boolean | MySQL JDBC 驱动默认将 TINYINT(1) 按 BIT 处理(tinyInt1isBit=true),读取为 true / false;如需按数值读取,请在 JDBC URL 中追加 tinyInt1isBit=false |
| TINYINT / SMALLINT / MEDIUMINT / INT / BIGINT(含 UNSIGNED) | Long | 按字符串读取后转为 Long;BIGINT UNSIGNED 超过 Long 取值上限时会读取失败 |
| DECIMAL / NUMERIC | Double | 转为双精度浮点数,超出精度范围会丢失小数精度;对精度敏感的场景建议在目标端改用 Decimal 或字符串类型 |
| FLOAT / REAL / DOUBLE | Double | 遵循 IEEE 754 浮点精度 |
| CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | String | – |
| ENUM / SET | String | 按枚举值文本读取 |
| JSON | String | 按文本读取,不做结构化解析 |
| DATE | Date | 精确到日 |
| DATETIME / TIMESTAMP | Date | – |
| TIME | Date | 超出 JDBC 时间范围的值(如 838:59:59)按 String 读取 |
| YEAR | Long | 按年份数值读取 |
| BINARY / VARBINARY / TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | Bytes | 不做内容解析 |
| GEOMETRY / POINT / LINESTRING / POLYGON 等空间类型 | Bytes 或 String | 不解析几何语义,建议先在源端转换为字符串 |
| 上表未列出的其他类型 | – | 任务报错并提示不支持的字段类型 |
九、字段类型映射(实时同步)
实时同步(整库多表 / 分库分表)由 CDC 连接器解析源端类型并写入 TCLake。下表为自动建表时目标表实际使用的字段类型 ,配置任务前请重点核对「备注」列标注的类型。
| 源端类型 | TCLake 目标类型 | 备注 |
| TINYINT / TINYINT UNSIGNED / SMALLINT(含 UNSIGNED)/ MEDIUMINT(含 UNSIGNED)/ INT / INTEGER | INTEGER | ZEROFILL 与对应 UNSIGNED 版本映射相同 |
| TINYINT(1) | BOOLEAN 或 INTEGER | 取决于参数 oceanus.tinyint1-is-bit:为 true 时映射 BOOLEAN,否则映射 INTEGER |
| INT UNSIGNED / INTEGER UNSIGNED / BIGINT | LONG | – |
| BIGINT UNSIGNED / SERIAL | DECIMAL(20, 0) | 取值超出 BIGINT 上限,改用十进制承载 |
| DECIMAL / NUMERIC / FIXED(精度 ≤ 38) | DECIMAL(P, S) | 精度与标度保留 |
| FLOAT(无精度) | FLOAT | – |
| FLOAT(有精度)/ FLOAT UNSIGNED / DOUBLE / DOUBLE PRECISION / REAL(含 UNSIGNED、ZEROFILL) | DOUBLE | 带精度的 FLOAT 落 DOUBLE,与无精度不同 |
| BIT(n) | BINARY | 按位串读取,如 0101100011 |
| DATE | DATE | – |
| DATETIME / DATETIME(n) | TIMESTAMP | 不带时区 |
| TIMESTAMP / TIMESTAMP(n) | TIMESTAMPTZ | 带时区语义,与 DATETIME 落点不同 |
| TIME | STRING | 不落时间类型 |
| YEAR | INTEGER | – |
| CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | STRING | – |
| ENUM / JSON | STRING | 按文本读取,不解析结构 |
| BINARY(n) | BINARY | – |
| VARBINARY(n) / TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | STRING | 二进制按字符串承载,与 BINARY(n) 落点不同 |
| GEOMETRY / POINT | STRING | 不解析几何语义 |
注意:说明:
十一、DML
| 操作 | 是否支持 |
| INSERT / DELETE / UPDATE | ✅ |
十二、DDL
| 操作 | 是否支持 | 支持的语法示例 |
| 新增列(ADD COLUMN) | ✅ | ALTER TABLE t ADD col TYPE [FIRST | AFTER col] |
| 删除列(DROP COLUMN) | ✅ | ALTER TABLE t DROP [COLUMN] col |
| 重命名列(RENAME / CHANGE COLUMN) | ✅ | ALTER TABLE t CHANGE old new TYPE |
| 修改列类型(MODIFY COLUMN) | ✅ | ALTER TABLE t MODIFY col TYPE |
| 新增表(CREATE TABLE) | ✅ | 不支持 CHECK、Temporary Table |
| 重命名表 / 删除表 / 清空表 | ❌ | |
DDL 变更响应仅在增量阶段 生效;删除表、重命名表 这类高危操作目标端通常不支持自动响应。详细的 DDL 变更响应策略(自动变更、忽略、日志告警)参见 实时整库多表任务配置。
十四、1. 配置账号权限
离线同步 :
CREATE USER 'wedata_user'@'%' IDENTIFIED BY 'your_password';GRANT SELECT ON your_database.* TO 'wedata_user'@'%';FLUSH PRIVILEGES;
实时同步 :
CREATE USER 'wedata_cdc_user'@'%' IDENTIFIED BY 'your_password';GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wedata_cdc_user'@'%';FLUSH PRIVILEGES;
建议为同步任务创建专用账号,避免与业务账号混用。
十五、2. 开启 Binlog(仅实时同步)
SHOW VARIABLES LIKE 'log_bin'; — ON 表示已开启
腾讯云 MySQL 默认开启 Binlog。自建实例需在 my.cnf 中配置:
[mysqld]log-bin=mysql-binserver-id=1binlog_format=ROWbinlog_row_image=FULL
修改后需重启数据库使其生效。
十六、3. 设置会话超时(推荐)
针对大库全量同步,建议放开会话超时:
SET GLOBAL interactive_timeout = 28800;SET GLOBAL wait_timeout = 28800;
十八、操作步骤
1. 登录 DataBuddy 控制台。
2. 在顶部切换到目标地域和 Workspace。
3. 进入 数据集成 > 数据源管理 (或 平台管理 > 数据源管理 )。
4. 点击 添加数据源 ,选择 MySQL 。
5. 填写连接配置与认证信息,详见 参数说明。
6. 点击 连通性测试 (参见 数据源连通性测试)。
7. 测试通过后点击 保存 或 保存 & 创建任务 。
十九、参数说明
| 参数 | 说明 | 是否必填 | 默认值 |
| 数据源名称 | 数据源在工作空间内的唯一标识 | 是 | – |
| 连接方式 | 串连接 / 腾讯云实例 | 是 | 串连接 |
| JDBC URL | 串连接方式下的连接串,格式 jdbc:mysql://host:port/database | 串连接必填 | – |
| 地域、实例 | 腾讯云实例方式下选择实例 | 腾讯云实例必填 | – |
| 用户名 | 数据库连接账号 | 是 | – |
| 密码 | 数据库连接密码(支持 SSM 凭证托管) | 是 | – |
| 数据源版本 | 5.6 / 5.7 / 8.0.x | 是 | – |
JDBC URL 示例:
jdbc:mysql://10.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
21、实时整库、分库分表
| 配置项 | 说明 |
| 来源表范围 | 指定表 (仅同步选中的表,新增表需重启)/ 正则匹配 (指定库名 + 表名正则,符合规则的新增表自动接入) |
| 读取模式 | 全量 + 增量 / 仅增量 |
| 订阅类型 | 可勾选 INSERT / UPDATE / DELETE,至少保留一种 |
| gh-ost 同步 | 是否同步 gh-ost 在线 DDL 产生的临时表 |
22、离线单表
| 配置项 | 说明 |
| 数据来源 | 已配置的 MySQL 数据源 |
| 库 / 表 | 支持指定与正则匹配;表名支持范围如 table_[0-99] |
| 切割键 | 仅支持整型字段;建议选择主键或带索引的列;避免 COLLATE 列 |
| 筛选条件 | 标准 WHERE 语法,支持时间参数(如 gmt_create > $bizdate) |
详细任务配置参见 表到表同步 与 实时整库多表任务配置。
23、最佳实践
| 实践 | 建议 |
| 账号权限最小化 | 为同步任务创建专用账号,仅授必要权限,不使用 root |
| Binlog 保留时间 | 至少 72 小时;大表全量同步建议更长 |
| 切割键选择 | 主键或索引列;避免 COLLATE 列以防数据重复 |
| 网络打通 | 优先使用内网连接,提升传输性能 |
24、主备切换处理(实时同步)
实时同步任务在 MySQL 主备切换场景下能否平滑恢复,取决于地址类型与是否开启 GTID:
| 场景 | 处理方式 |
| 腾讯云数据库 MySQL(实例地址不变) | 闪断秒级,任务自动重连新主,从最近快照位点继续;故障 failover 自动完成,无需人工干预 |
| 自建 MySQL + VIP / DNS | VIP / DNS 漂移到新主后任务自动重连;建议任务重试次数 ≥ 3 |
| 自建 MySQL + 固定 IP | 切换前暂停任务,切换后修改数据源 IP,再继续运行 |
·强烈建议开启 GTID :主备切换场景下基于 GTID 恢复才能保证不重复、不丢数据。
·异步复制下主库故障可能丢失最后几个未同步的事务,这是 MySQL 复制层本身的限制;如需零丢失,建议使用强同步或半同步复制。
26、Q:报错 A slave with the same server_uuid/server_id as this slave has connected to the master?
A:多个同步任务使用了相同的 server-id。系统已优化为随机生成 server-id,如旧任务在高级参数中显式配置了 server-id,请删除该参数。
27、Q:报错 Cannot replicate because the master purged required binary logs?
A:MySQL 上的 Binlog 文件已被清理。请增加 Binlog 保留时间,或优化作业并发以加速消费。
28、Q:报错 Connection reset by peer 或连接超时?
A:网络问题或作业反压导致空闲超时。可调大 slave_net_timeout(如 120),或优化作业并行度与内存。
29、Q:JobManager OOM?
A:数据量大或主键范围分布稀疏导致切分过多。可:
·调大 JobManager CU。
·调整高级参数 scan.incremental.snapshot.chunk.size(默认 8096)。
·调整 split-key.even-distribution.factor.upper-bound。
30、Q:实时任务运行期间,将 MySQL 的 binlog_format 从 ROW 改为 STATEMENT 会怎样?
A:实时任务仅在启动时校验 binlog_format=ROW,运行期间不再检查。切换为 STATEMENT 后,所有 DML 都会被解析器视为 DDL,下游无法感知数据变更,造成静默数据缺失。请在任务运行期间不要修改 binlog_format。
31、Q:使用 COLLATE 列作为切割键,部分数据重复?
A:COLLATE 影响排序、筛选与分组结果。设置切割键时请选择非 COLLATE 列。
32、Q:是否支持 gh-ost 在线 DDL?
A:支持。开启 gh-ost 同步开关后,会监控并同步 *_gho 临时表的变更。前提条件:gh-ost 能正常访问 MySQL;腾讯云 CDB 需在 gh-ost 命令中追加 –aliyun-rds 参数。
33、相关文档
·添加数据源连接
·数据源连通性测试
·支持的数据源与读取能力
·实时整库多表任务配置